Каков наилучший способ скопировать данные из структур Particle_1 и Particle_2 в Particle без однозначного присвоения переменной?
Не существует соответствующего механизма для этого с типами как Вы определили их.
Кроме того, я не хочу определять структуру Particle как структуру Particle_1 и Particle_2
Это, честно говоря, абсурдное ограничение. У вас есть одна структура данных, которая представляет собой совокупность данных двух других (и это немного больше, чем техническая составляющая того, что это две, а не одна и та же), и , вы хотите совместимость среди этих. Составная структура должна иметь другие элементы в качестве членов:
struct particle {
char name[16];
int lati;
int longi;
float pressure;
double temperature;
};
struct two_particles {
struct particle p1;
struct particle p2;
};
(теги структуры изменены для ясности.) Обратите внимание, что для этого требуется только одна одночастичная структура, которую я ожидаю будет также преимуществом, и вы можете использовать структурное назначение для обновления одной половины и / или другой из struct two_particles
:
struct particle particle1 = /* ... */;
struct particle particle2 = /* ... */;
struct two_particles pair;
pair.p1 = particle1;
pair.p2 = particle2;
... или даже ...
pair.p1 = pair.p2;
Между прочим, между ними нет псевдонимов.
В случае, если у вас есть существующий код, который зависит от доступа к элементам отдельных частиц напрямую по оформленному имени, вы также можете приспособиться к этому. , включив некоторые анонимные структуры и союзы:
struct two_particles_mix {
union {
struct particle p1;
struct {
char name_1[16];
int lati_1;
int longi_1;
float pressure_1;
double temperature_1;
};
};
union {
struct particle p2;
struct {
char name_2[16];
int lati_2;
int longi_2;
float pressure_2;
double temperature_2;
};
};
};
При этом вы получаете оба подхода в одном:
struct two_particles_mix pair2;
pair2.p1 = particle1;
pair2.p2 = particle2;
int lati1 = pair2.lati_1;
double pressure2 = pair2.pressure_2;