单选题 已知字符0的ASCII代码值的十进制数是48,有以下程序:
#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("% x/n", s->c[0]);
}
其输出结果是______。
  • A.39
  • B.9
  • C.38
  • D.8
【正确答案】 A
【答案解析】[解析] 在共用体变量中,所有成员共用存储空间。因此变量r中,成员i[0]和成员c[0]和c[1]共用2字节的存储空间,c[0]和c[1]都占1字节,因此,c[0]与i[0]的低8位共用1字节,而c[1]与i[0]的高8位共用1字节。程序以十六进制数的形式输出s->c[0]的值,因此只需求出在i[0]的低8位中的值即可。程序有赋值语句:s->i[0]=0x39; s->i[1]=0x38;,根据以上分析,只需关心s->i[0]=0x39;的赋值即可。因为c[0]与i[0]的低8位共用1字节,所以s->c[0]的十六进制数就是39。