请教解释一下这个答案

来源:百度知道 编辑:UC知道 时间:2024/05/27 12:34:12
union un{
Int i;
Char [2];};
Void main()
{
Union un x;
x.c[0]=10;
x.c[1]=1;};
printf(”\n%d”,x.i);}
为什么答案是:266

哦,这个问题啊,,主要理解共用体和结构体的基本区别就明白了,,
作为共用体数据结构,系统为之开辟的存储空间是按里面所定义元素类型所占的最大空间的大小作为共用体的空间大小,,像上面你所定义的共用体其所占的空间大小是char[2]所占的大小2B,,要不就是int i所占的空间(如果其空间大于2B),,

所以在内存中其形式用二进制表示:
int i 的空间==00000000 00000000 /*这里有两个空间,其实只有一个而于,为
char[2] 的空间==00000000 00000000 了好理解,所以用两个 */
所以当你赋值;x.c[0]=10;x.c[1]=0;时;
在内存中其形式用二进制表示变为:
int i 的空间==00000001 00000010 /*这里为什么上下两空间放的数不对齐呢,是
char[2]的空间==00000010 00000001 要很深入的了解机算机内部,一下了说不清*/
所当输出变量i时,,你用上面的二进制换成十进制就得266了,,

i没有赋值 所以这个值是随机的

因为是共用体
int 和char占用的都是一个内存空间
对char c[2]赋值以后 i的内存空间里面已经存有值了

你的题目有问题,根本执行不了,下面是改过的

#include <stdio.h>
union un
{
int i;
char c[2];
};

void main()
{

union un x;

x.c[0]=10;
x.c[1]=1;
printf("%d",x.i);

}

在vc++6.0下执行,至于你说i为什么等于266,因为没有附值,可能是个随机数