这一段简单的C语言结果是多少? 老师说的和实际的好像不一样,错在哪

voidmain(){union{chari[2];intk;}r;r.i[0]=2;r.i[1]=0;printf("%d",r.k);}老师说结果是2和实际的好像不一... void main()
{
union
{
char i[2];
int k;
}r;
r.i[0]=2;
r.i[1]=0;
printf("%d",r.k);
}

老师说结果是2
和实际的好像不一样,错在哪
展开
 我来答
百度网友83cdc1c
2013-05-06 · TA获得超过5788个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:819万
展开全部
老师说的结果是2,有两个前提:

1. 字节序是小头字节序,即低位字节位于低地址空间,高位字节位于高地址空间,这样i[0]就是整型的最低位字节,r[1]就是整型次低位字节,如果是大头字节序,i[0]就变成了整型的最高位字节,i[1]就变成了整型的次高位字节;
2. 整型int是2字节长。否则如果是4字节长,还有2字节未被赋值,整型值不确定。
追问
用VC++6.0运行了结果是随机值。
追答
这就是整型是4字节的结果,有两个字节没有被赋值,是随机的。但有两个字节是确定的,你可以把这个随机值用计算器转成16进制看看就可以发现,有两个字节是0x00和0x02的值。
百度网友72165e1
2013-05-06 · TA获得超过2169个赞
知道大有可为答主
回答量:1369
采纳率:100%
帮助的人:406万
展开全部
结果就是2。
这里的int型数据是两个字节的,低字节是2,高字节是0,其二进制数按从低字节到高字节排列顺序是;
0000 0010 0000 0000
将上面的两个字节看做是一个整数,就是
0000 0000 0000 0010
也就是整数2
但是,如果是在32位字长的系统里,由于整数为4个字节,而上面只定义了两个低字节,而高字节没有定义,所以可能会是一些不确定的数据,所以显示出来的数字不一样,如果想显示2的话,做如下修改:
union{
char i[4];
int k;
}r;
r.i[0]=2,r.i[1]=r.i[2]=r.i[3]=0;
再显示r.k时为2
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cqpcy
2013-05-06 · TA获得超过658个赞
知道小有建树答主
回答量:746
采纳率:66%
帮助的人:358万
展开全部
我觉得是0 不是很懂 猜的
你想知道结果要先去了解下大小端的知识
不同机子存储机制会有不同 大端小端百度之
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
依米花堵8d
2013-05-06 · 超过23用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:47.5万
展开全部
结果是2啊,r.k的值和r.i[0]的值是一样的
因为union里的地址是一样的,也就是说r.k内存地址和r.i[0]的地址是一样的,所以值是一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
merry_water
2013-05-09
知道答主
回答量:10
采纳率:0%
帮助的人:7.5万
展开全部
这个结果是空的,没看到你在哪儿给k赋过值。(我错了)

在低端机的前提下,她的值是 0x cccc0002
若果是高端机的话。值为 0x 0200cccc
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hai3zei3wang3
2013-05-06 · TA获得超过173个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:91.4万
展开全部
这r.k都没被赋值呀,怎么可能是2,你是不是代码弄错了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
影子I破帅
2013-05-06 · TA获得超过105个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:218万
展开全部
如果k没有输入具体值的话,默认值为0,所以r.k,即是
r.[0]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式