一道C语言共用体问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 01:21:31
#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]); }
大家看看,这题的运行结果居然是9 !!!!!!
我曾经见过一个和这一样的题目,当时我没有运行,只是照书本上的答案请教别人。这是地址http://zhidao.baidu.com/question/49300535.html。他也分析的很好。但是我今天看到这个题目,答案是9.运行后,答案果然是9.我又迷惘了。后天就考C语言二级了,请前辈请教一下这种题型。

printf("%c\n",s->c[0])
看清这句,
这条打印的字符 %c,0x39为16进制,化为10进制为57,为9的ascii码
而你引用那个网址的输出为%x 打印16进制

遇到这种题 要看清,不能因为简单轻视

union是共用体,什么意思呢,就是一个union中几个成员共同占有一段内存,当然按照占有空间最大的那个成员所占据的空间来给共用体变量分配空间。当你拿union定义了一个共用体变量r时,通过s->i[0]=0x39; s->i[1]=0x38;此时s所指向的共用体r中第一个字节中的内容便存放的是9的ASCII码,所以通过printf输出时便得到9这个数字字符了。