C语言 关于“结构体与共用体”问题

来源:百度知道 编辑:UC知道 时间:2024/06/29 23:41:42
有一个程序:
union
{int i;
char c[2];
}x;
main()
{x.c[0]=12;
x.c[1]=1;
printf("%d\n",x.i);
}
结果是268,请问这是为什么啊?

int i 是2个字节
char c[2]也是两个字节
公用两个字节的空间
x.c[0]=12
x中的c[2]中的第一个元素是12号字符(ASCII码所对应的)
x.c[1]=1是第一个元素是1号字符(ASCII码所对应的)
printf("%d\n",x.i)就是把刚才两个字节中的数值打印出来
12的二进制码是00001100
1的是00000001
并且数组在前面的元素在较低位
所以输出时为0000000100001100 即268

共用体占用的是同一块内存空间,这里就是4个字节,而char[0]是最低位,char[1]是倒数第二位,所以是这么写的:0000 0000 0000 0000 0000 0001 0000 1100,i也是这个地址,那你说i是多少?不就是256+12 = 268么