能否解释该程序,小白求助
#include <stdio.h>int main()
{
union eg1
{int c;
int d;
struct{
int a;
int b;
}out;
}e;
e.c=1;e.d=2;
e.out.a=e.c*e.d;
e.out.b=e.c+e.d;
printf("%d\t%d\n",e.out.a,e.out.b);
return 0;
}
只要理解union作为联合体,其“成员变量"的储存方式就简单了。
union设计来时为了节约空间,其”成员变量"储存位置相对于基地址的偏移都为0,
因此,在此例中,c,d以及out.a其储存位置完全相同,会相互覆盖。
而out.b相对于基地址的偏移为4,相对独立。
之后就很好理解了。 union和struct是两种不同的类型。union是联合体,所有成员变量存储位置一样,struct是结构体,每个成员变量单独存储。
我们以你这个程序为例,看一下这几个变量的存储。假设你的环境中int是两个字节。
变量名 第一字节 第二字节 第三字节 第四字节
int c: xxxx xxxx xxxx xxxx
int d:xxxx xxxx xxxx xxxx
struct out:xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
(inta) (intb)
看了存储之后,接下来分析程序的执行过程。
首先,e.c=1,第一个int空间存放1;
然后,e.d=2,第一个int空间被修改为2;
之后, e.out.a=e.c*e.d,第一个int空间被修改为4;
最后, e.out.b=e.c+e.d,第二个int空间存放8。
所以程序执行结果是:4 8
页:
[1]