表面上看它跟 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电脑都用的小端在前

总之目前看, 这不是很重要的知识点