求助一道c语言问题?

下列程序的执行结果是______。 #include <stdio.h> union un { int i; char c[2]; }; void main() { union un x; x.c[0]=10; x.c[1]=1; printf("\n%d",x.i) } 请解答详细点 不理解

第1个回答  2019-11-18
#include <stdio.h>
union un //定义联合体,i与数组c共用存储单元
{ int i;
char c[2];
};
main()
{ union un x;
x.c[0]=10; //二进制为00001010
x.c[1]=1; //二进制为00000001
printf("\n%d",x.i); //输出的是二进制0000000100001010的十进制形式,即266
}追问

两个二进制加一起?

追答

不是“加”一起,数组的元素本来就是连续的。

上面“二进制形式”应是“十进制形式”。

追问

好滴

本回答被提问者和网友采纳
第2个回答  2019-11-13
乱码,这是联合,i的值都没定义一个空的,在内存里面就是乱的。
第3个回答  2019-11-13
这个结果谁知道啊, x.i 是个未初始化变量,虽然和x.c公用,但只有低16位是公用的,高16位是随机的,所以没法填写结果啊。
如果x.i原始值是0,赋值赋的是低16位,那么值是0x0000010a, 应该是266
第4个回答  2019-11-13
由于本题定义的是共用体,所以成员表列中的整型变景x与字符数组c共占用同―个存储单元,且此存储单元为 2个字节,通常c[0]位于低字节,c[1]位于高字节,所以x.i的值为0000 0001 0000 1010 =266追问

是二进制相加吗

追答

高8位是由c[1]组成,低8位是由c[0]组成,拼成了一个16位二进制数

相似回答