C语言问题

字符'0'的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是
#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
请解释一下~

你需要明白数据在内存中是如何存储的
s->i[0]=0x39;
i[0]有4个字节从低到高非别为ox39 0 0 0
i[1]同理为ox38 0 0 0

char c[4]占用4个字节和i[0]对应,所以c[0]里的内用为ox39
ox39转化为10进制为57,也就是字符9
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-08-03
intel存储数字是逆序的,所以你赋值后实际存储的情况是0x39 0x00 0x38 0x00,C[0]是0x39(十进制是48+9=57)ascii排序是0-9,所以对应的字符是9
相似回答