用C++做这道题

抄袭、复制***以达到刷声望汾或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号是时候展现真正的技术了!

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的时候把四个字节都读出来

参考资料

 

随机推荐