订单管理系统有哪些:c语言问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/05 00:49:25
#include <stdio.h>
main()
{ union
{ int i[2];
long k;
char c[4];
}r,*s=&r;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%c\n",s->c[0]);
}
A) 39 B) 9 C) 38 D) 8
参考答案B,要求有详细分析过程。

很多人说,r占8个字节,为什么不是4个字节
谢谢你们的回答。
虽然在不同的编译器,占字节数不同,但是运行结果是相同的,我试过了

楼上说的有些欠妥。“int,现在一般认为它占用4个字节,而不是2个”。其实到底占用几个字节,还得看你用什么编译器。基于DOS(16位系统)的编译器就是占用2个字节,比如TC2.0。基于Windows(32位系统)的就占用4个字节,比如VC。所以r占8个字节,也可能占4个字节。具体占几个可以用sizeof(int),sizeof(r)试一试,就知道了。0x39代表16进制。
我拿TC2.0来讲为什么是B。i[0]的字节数据:低字节是00111001,高字节是00000000,合起来就是0x39。而s->c[0]取得是低字节的的数据。00111001对应的十六进制就是0x39(ascii码),其对应字符就是9。

分配联合体存储空间的时候,按照里面最大的元素来分
int,现在一般认为它占用4个字节,而不是2个,所以int i[2]要占用8个字节啊。
所以r就分到了8个字节。

题目我没看懂。0x39是什么意思,我不懂。请高手解答

用联合的定义的变量所占的字节就是联合体内字节最大的那一个
联合体内LONG的字节最长为8所以 就是8个字节

s->i[0]=0x39就是将16进制的数赋值给s->i[0]

然后存有内存中的先是高字节,后是低字节,最后,先输出的就是9