有个C语言题目,请大家帮帮忙,谢谢!!!!

以下程序的输出结果是#include<stdio.h>main(){union{inti[2];longk;charc[2];}r,*s=&r;s->k=0x123456... 以下程序的输出结果是

#include<stdio.h>

main()

{union{int i[2];

long k;

char c[2];

} r, *s=&r;

s->k=0x12345678;

printf(“%x\n,s->c[0]);

}

A) 12

B) 78

C) 1234

D) 5678
请详细解说
展开
 我来答
◆江城子◇09
2007-04-08 · TA获得超过686个赞
知道答主
回答量:54
采纳率:0%
帮助的人:0
展开全部
0x12345678=0001 0010 0011 0100 0101 0110 0111 1000

按低位存储,八位一个字节,应该是B
百度网友294795d67
2007-04-05 · TA获得超过113个赞
知道答主
回答量:107
采纳率:0%
帮助的人:70.9万
展开全部
耍人的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
weijiel528
2007-04-05 · 超过22用户采纳过TA的回答
知道小有建树答主
回答量:56
采纳率:0%
帮助的人:0
展开全部
lz程序环境 TC下,
union
{ int i[2];
long k;
char c[2];
} r, *s=&r;
一个联合中的数据成员在内存中的存储是互相重叠的,每个数据成员都在相同的内存地址开始。它们共享同一块内存。union的长度为其内最长成员的长度,本题来说,在TC环境下是4个字节。
并且联合的存储是:
低地址存高位字节,高地址存低位地址。
0x12345678=0001 0010 0011 0100 0101 0110 0111 1000
八位一个字节,刚好4个字节。
按照存储原则,在读取这块内存的时候,s->c[0]指向的地址块的编码实际上是 0111 1000 所以输出 0x78;
假如输出s->c[1]指向的是 0101 0110 输出 0x56;
假如输出s->i[0]指向的是 0101 0110 0111 1000 输出5678;
假如输出s->i[1]指向的是 0001 0010 0011 0100 输出 1234;
环境是TC,如果在c++下面,鉴于现在的机器都是32位了,int变为了4个字节,所以此时这个union的长度变为了8个字节;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
andre54321
2007-04-05 · TA获得超过1462个赞
知道答主
回答量:58
采纳率:0%
帮助的人:0
展开全部


没答案
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
心事成
2007-04-06 · TA获得超过118个赞
知道答主
回答量:139
采纳率:0%
帮助的人:0
展开全部
怎么考这种题啊!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友22c381adc
2007-04-06 · 超过80用户采纳过TA的回答
知道小有建树答主
回答量:325
采纳率:0%
帮助的人:246万
展开全部
在windoes下选B
其它的就可能不是这个答案了
主要是由机器存放字节的顺序来决定的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(17)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式