关于C语言联合体的问题

#include<stdio.h>union{inti;charx[2];}a;voidmain(){a.x[0]=10;a.x[1]=1;printf("%d",a.i... #i nclude <stdio.h>
union
{
int i;
char x[2];
}a;

void main()
{
a.x[0] = 10;
a.x[1] = 1;
printf("%d",a.i);
}
这个程序输出是什么 ?帮忙解释一下怎么回事。
展开
 我来答
naobing111
2011-03-03 · TA获得超过418个赞
知道小有建树答主
回答量:150
采纳率:0%
帮助的人:182万
展开全部
在VC6.0下运行,输出的是266。
我觉得是这样的:
union是所有的变量共用同一块内存。其大小就是其包含的变量中最大的数据类型。
本题中应该是4B,也就是int的大小。
当执行a.x[0] = 10; a.x[1] = 1;时,存储形式是000100001010(其长度应该是32,省略前面的0)
其中的0001就是a.x[0]中的十位数字1,一次类推。
当你输出a.i时,程序就把000100001010当成int型输出。
二进制的0000100001010就是266。

这是我根据答案推测的,不知道对不对。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangbwell
2011-03-03 · TA获得超过1238个赞
知道小有建树答主
回答量:490
采纳率:0%
帮助的人:738万
展开全部
内存共享如下:
int i; 字节1 字节2 字节3 字节4 (共四个字节)
char x[2] x[0] x[1]
对整数值为 (字节1)+256*(字节2)+ 256*256*(字节3)+ 256*256*256*(字节4)
下面根据上面的公式计算输出的!!!

这个程序输出是这样:
void main()
{
a.x[0] = 10;
a.x[1] = 1;
printf("%d",a.i);
}
那么输出为:266 (10+256*1==266 高2字节为0)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
seamaswong
2011-03-03 · TA获得超过1122个赞
知道小有建树答主
回答量:483
采纳率:0%
帮助的人:381万
展开全部
输出结果的话要去查表的
union是里面所有数据使用同一个内存里的,只不过读取的时候不一样
此例中,这个union只占1个int的内存 int=2Byte,char=1Byte
在内存中的结果是int的前面1个Byte赋的是a.x[0],第2个Byte是a.x[1]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
maonianlove
2011-03-03 · TA获得超过1233个赞
知道小有建树答主
回答量:1027
采纳率:0%
帮助的人:1131万
展开全部
输出时 266,首先联合体所有数据共占一个空间,这个你必须知道!
int 占 4个 字节,char x[2]占两个字节,所以你这个是占四个字节!
你的数据第一个字节被“10”占据,要转化成ascii码!
你的数据第二个字节被“1”占据,要转化成ascii码!

转化结果你自己查书看下就可以了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rockrider001
2011-03-03 · TA获得超过1567个赞
知道小有建树答主
回答量:1200
采纳率:100%
帮助的人:1184万
展开全部
这个跟计算机字节序有关的,可能是26,或是161
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式