C语言问题,帮忙解答一下!!!
来源:百度知道 编辑:UC知道 时间:2024/06/28 23:50:07
已知字符0的ASCII码为十六进制的30,下面程序的输出是
main()
{ union { unsigned char c;
unsigned int i[4];
} z;
z.i[0]=0x39;
z.i[1]=0x36;
printf("%c\n",z.c);}
A) 6 B) 9 C) 0 D) 3
帮我解释一下运算过程!!
main()
{ union { unsigned char c;
unsigned int i[4];
} z;
z.i[0]=0x39;
z.i[1]=0x36;
printf("%c\n",z.c);}
A) 6 B) 9 C) 0 D) 3
帮我解释一下运算过程!!
)已知字符0的ASCII码为十六进制的30,下面程序的输出是
A}6 B}9 C}0 D}3
main()
{union{unsigned char c;
unsigned int i[4];
}z;
z.i[0]=0x39;
z.i[1]=0x36;
printf(“%、n”,z.c);}
B
因为定义的是一个联合体。所以它在内存中占的字节数是8,它们公用这个存储空间,而且这几个成员之间是相互覆盖的。
就这个题来说,比如给在分配的内存起始地址是1000,那么成员c的值从地址值为1000的地方读取,成员i从1000,1001.。。。1007中取得,0的ascII是30,那么0x39就是9,存在地址为1000的地方,所有显示z.c就是9
9
z存储为0x39 0x00 0x36 0x00
当以char取出时,z.c就是0x39了显示为字符就是9
没有可解释的运算过程,就是个union概念的问题
z.i[]与z.c公用内存
z.i[0]=0x39;<=>z.c=0x39;
C语言中,字符与数字是通用的,z.c=0x39是合法的,以字符的形式解释z.c就是9,<=>z.c="9",