注:下面的所有结果都是在小端机器上实现的。
union:多个变量共享一块内存
#include<stdio.h> union ss { int a; char b; }; int main() { ss aa; aa.a = 1; printf("%d %d ", aa.a, aa.b); aa.b = 2; printf("%d %d", aa.a, aa.b); return 0; }
运行结果:
解释:下面是变量在内存中的存放位置
变量a内存大小是4个字节,所以存放在整个内存中,变量b内存大小是一个字节,所以只是存放在内存的低地址的第一个字节,小端机器上会把低位字节存放在低位地址上,当做aa.a=1;时在低地址的第一个字节上写入1,而这块内存是a与b共享的,所以此时b的值也会变成1.接着再做aa.b=2;对b重新赋值为2,此时会在b的 内存上写入2,同时也会覆盖掉原本内存上的1,这样当输出a的值时就变成了2,输出b的值也会变成2.