为什么输出 来的是 21,43

来源:百度知道 编辑:UC知道 时间:2024/05/17 00:22:16
#include <stdio.h>
main()
{union
{char ch[2];
int d;
}
s;
s.d=0x4321;
printf("%x,%x",s.ch[0],s.ch[1]);}

联合体 在内存中的存放位置是重叠的

char ch[2] 和 int d 的起始地址是一样的

int 两个字节 顺序是 低位字节在前,高位字节在后
0x4321

d 就是 21 在前,43 在后

所以 输出 ch[0] ch[1] 分别是 21 43

union是一个联合体,里面的成员共用同一块内存,所以
s.d = 0x4321
相应的ch[0] = "21" ch[1] = "43"
printf输出结果就是21,43

这涉及所谓的"字节顺序",我们一般的计算机中采用的是"小端字节顺序",即多字节类型的数据中的低位字节,放在低位地址的内存空间.

这是一个共用体,里面的成员共用一块内存。在turbo c里Int占两字节,char占一个字节,所以s.d内的数分成两半,分别付给数组ch,但是在共用体中整形数的地位数字存在内存的低字节,高位存在高字节,它的存储形式是 21 43,所以21赋给s.ch[0],43赋给s.ch[1],就得到你的结果了。
书上有介绍,也有例子,你可以看看。