有个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
请详细解说 展开
#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
请详细解说 展开
19个回答
展开全部
耍人的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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个字节;
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个字节;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
晕
没答案
没答案
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
怎么考这种题啊!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在windoes下选B
其它的就可能不是这个答案了
主要是由机器存放字节的顺序来决定的
其它的就可能不是这个答案了
主要是由机器存放字节的顺序来决定的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询