C语言问题,(高手来帮忙,详细说明下原因)谢谢了。

写出下列程序的执行结果。
void main()
{union exx
{int a,b;
struct
{int c,d;}lpp;
}e={10};
e.b=e.a+20;
e.lpp.c=e.a+e.b;
e.lpp.d=e.a*e.b;
printf("%d,%d\n",e.lpp.c,e.lpp.d);
}
这个程序的运行结果是多少呢?为什么是那个结果呢?请高手帮忙分析下原因。还有如果把他改成c++程序应该做哪些改动呢?

60,3600
union是个共用体。
共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。
所以e = {10};也就是e.a = 10;
e.b = e.a+20;
e.b = 30;这时候e.a 也是等于30的。因为两个变量共有一个地址。
e.lpp.c的值就是e.a和e.b的和,也就是60;
e.lpp.d的值就是e.a和e.b 的积,也就是3600;
你要明白,共用体union的定义,所有的共同体成员成用一个空间,并且同一时间只能储存其中一个成员变量的值。不懂的再追问我好啦。
C++是完全兼容C的,这段代码只要包含上stdio.h这个头文件,就是一个C++程序了。追问

共用同一个地址他的数值一定是一样的么?可不可以不一样呢?

追答

共用同一个地址,如果是同一类型的,数值肯定是一样的啊。如果是不同类型的,可能就是不一样的了。

追问

,哦,知道了。谢谢啊。我能加入你们团队么?或者有什么C语言的群么?帮我推荐下好不?

追答

107500507 QQ群。至于团队,呵呵,我一般都独来独往。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-12
60,3600追问

为什么啊?我怎么觉得是40,300呢?能详细说明下原因么?

第2个回答  2012-04-12
恩恩

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网