union共同体内存问题
为什么下面这段代码结果a.i为13?感谢!
#include <stdio.h>
union pw
{
int i;
char ch;
}a;
int main()
{
a.ch = 13;
a.ch = 0;
printf("%d\n",a.i);
}
老牛来学习 发表于 2020-7-7 00:29
我知道会覆盖,但是我代码是中的union为4个字节大小,字符型的数组只有两个字节大小,我去读int应该把两 ...
首先一个union为4字节,
所以你的另外两个字符型为了对齐在内存中应该占一个字(只不过高字节都是00)
就比如:存一个int类型的是 00 00 00 0D
而按照两次char类型存入则变成了 00 00 00 0D
所以你读出来是13,而按照两个char读则读出来分别是00 0D
也可以换测试值,比如a.i = 0x0A0B0C0D;
这时候你读两个char稍有不同,会直接读取到0D和0C
但是存两个字符则为了填满4字节会按照两个字来算
如a.ch = 1; a.ch =1;
这时候i的值为101H而非101 传送门 Hello. 发表于 2020-7-6 23:55
传送门
我知道会覆盖,但是我代码是中的union为4个字节大小,字符型的数组只有两个字节大小,我去读int应该把两个字符都读出来变成130吗?
页:
[1]