C语言 以下程序的输出结果是( )

来源:百度知道 编辑:UC知道 时间:2024/06/17 17:19:24
main()
{ union
{char i[2];
int k;
}r;
r.i[0]=0; r.i[1]=2;
printf("%d \n", r.k);
}
A)2 B)512 C)0 D)不确定
答案是B,为什么啊?解释一下。

这是Big Endian
低位在前,高位在后
所以int的数据
比如0xFE00
内存中存的是00FE

你的int内存中是0002
换成0x0200
就是512

这种垃圾题尽量不要做。除了考试难为人也没啥别的用。

这是个联合体,也叫共用体,它的赋值是覆盖的,因为他们本身就占用一块内存空间。
char型数组,占用2×1字节,
int变量占用1×4字节,
所以共用体变量r占用4个字节。对成员r.i[0]和r.i[1]赋值之后,这个内存空间就有了内容,而不论你输出哪个成员结果都是一样的。
而内存空间情况是:
00000000 00000000 00000010 00000000
所以结果是这四个字节以十进制输出的话就是512呗。