union中的各个成员共一块内存而且這块内存的大小是和union中占空间最大的元素所占空间一样大(例如上边T1,sizeof(a)=4)
而且对union中不同成员的写操作会覆盖其他成员的值
main函数中对union變量a中的数组X进行赋值,由于会分配4个字节的空间但是x只占了两个字节的空间,而且在赋值时从低地址开始
所以a在内存中的分布是这樣的:
从高位到低位读也就是0x00 00 01 0A 注意:低位两个字节是01 0A 不是10 A0(我就是当时把这个搞错了。)
当输出a.i时,由于占同样一块内存所以会读出㈣个字节,转换为10进制也就是266
还有一个误区就是:10在16进制中是A但是A只有4位,但是一个字节有八位在高位添0,所以10在内存中是0A而不是A(当时我也搞错了。。)
union中有两个变量一个int i 占四个字节,一个结构体占两个字节,所以这个union占有四个字节的内存
当给i赋值后内存中昰这样的:
当输出结构体中的成员时:
当给结构体中的元素赋值后:
当输出i的时候把四个字节都读出来