表面上看它跟 struct
一样
union AnElt {
int i;
char c;
} elt1, elt2;
elt1.i = 4;
elt2.c = 'a';
elt2.i = 0xDEADBEEF;
但不一样的是, struct
占用的是成员类型之和, 而 union
是成员中的最大值
换句话说, union
的成员占据内存中的同一块区域
什么意思?
typedef union {
int i;
char ch[sizeof(int)];
} CHI;
int main(){
CHI chi;
chi.i = 1234;
for (int i; i<sizeof(int); i++) {
printf("%02hhX",chi.ch[i]);
}
return 0;
}
分析:
chi.i
是一个4字节的变量, 1234存放进去之后: |00|00|04|D2|- 而
chi.ch
是1字节, 且占据同样的内存, 会把上面的数字解读为自己类型的变量 但最后实际输出是 |D2|04|00|00| , 这是因为我们的x86电脑都用的小端在前
总之目前看, 这不是很重要的知识点