本帖最后由 vention123456 于 2017-10-18 20:59 编辑 请问,我有结构体 两个结构体,如何将快速的赋值过去。 typedef struct { unsigned char A1[150]; unsigned char A2[100]; unsigned long int A3[200]; unsigned short int A4[100]; unsigned long int A5[300]; }ST_ONE; typedef struct { unsigned char A1[150]; unsigned char A2[100]; unsigned long int A3[200]; unsigned long int A3_0[100]; // 增加一个成员A3_0 unsigned short int A4[100]; unsigned long int A5[300]; }ST_TWO; ST_ONE stOne; ST_TWO stTwo; 请问,有什么办法,使得stOne,和stTwo 两个结构体,相同的成员名赋值为一样的,而结构体stTwo多出来的 一个成员A3_0,我可以再另行赋值。 是否可以用共同体?这样使得stOne结构体 在一赋值的时候, stTwo结构体内相同成员名的成员就已经赋值了?如果用共同体的话,要如何实现?;还是说有其他好的方法。麻烦各位大神指点指点小弟。 |
union 其实就是占用同一块内存,在共用体里边定义一个与结构体等长的char数组,数组里边每个字节对应结构体从上到下的字节。按照结构体里边每个元素的字节数从stOne赋值值stTwo。
stOne.A1[i]= stTwo.A1[i]=0x00;
}
............
C 语言可不支持这样的连续操作
而且这涉及到成员对齐问题,可以看看用 pack预编译指令能否解决。
union
{
typedef struct
{
unsigned char A1[150];
unsigned char A2[100];
unsigned long int A3[200];
unsigned short int A4[100];
unsigned long int A5[300];
}ST_ONE;
typedef struct
{
unsigned char A1[150];
unsigned char A2[100];
unsigned long int A3[200];
unsigned long int A3_0[100]; // 增加一个成员A3_0
unsigned short int A4[100];
unsigned long int A5[300];
}ST_TWO;
}
但应该把TWO的那个多出来的放在底部,这样你对TWO进行初始化后,ONE就跟着一样了;记住他们在内存里是共享一个存贮单元的,你修改了其中任何一个,另外一个也跟着一样修改了。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
问题就是不能把多出的放最下面;多出的是中间插入的。
问题就是不能把多出的放最下面;多出的是中间插入的。
union 其实就是占用同一块内存,在共用体里边定义一个与结构体等长的char数组,数组里边每个字节对应结构体从上到下的字节。按照结构体里边每个元素的字节数从stOne赋值值stTwo。
先定义两个结构体指针,分别指向两个结构体的首地址;
再强制将两个指针转换为uint8类型
用for循环逐个读取并幅值
=========
个人愚见,勿拍砖