c语言问题,,结构体题目,大家进!~

来源:百度知道 编辑:UC知道 时间:2024/05/25 04:03:09
#include<stdio.h>
main()
{union EXAMPLE
{struct
{int x,y;
}in;
int a,b;
}e;
e.a=1;e.b=2;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf("%d,%d\n",e.in.x,e.in.y);}

实话说吧,看题目不懂,感觉没什么特殊的不认识的东西,但是凑在一起就是另外的算法了,我就不知道了,能有大哥详细说明怎么做这道题的么?我能看懂能理解的话,加分感谢!~~~

union EXAMPLE
{Struct
{int x,y;}in;
int a,b;
}e;
这样写的话会看的明白一点的,
输出的值e.in.x=e.a*e.b=2*2=4,e.in.y=e.a+e.b=4+4=8
说明:
在union中,以最后一次赋值为准,即e.b=2,所以说e.in.x=e.a*e.b=2*2=4
因为struct in也为union变量,所以说此时union的值为4,
所以说e.in.y=e.a+e.b=4+4=8。
结果输出:4,8

结构体套结构体的题目
e包含3个部分,即a,b,in
其中in又包含两个部分,即x和y
a部分是属于e的,要用e.a表示,e.b和e.in同理
x和y属于in,要用e.in.x和e.in.y表示
题中把a赋值为1,把b赋值为2,然后x赋值为a*b,y赋值为a+b
最后输出x和y

联合与结构不同之处在于:
联合中所有的成员都是从内存相同的地址开始的

如下图所示:
in--------->
a----|----->
b----|----->
首先为:为a赋值为1:
in--------->
a--1-|----->
b----|----->
然后为b赋值为2:
in--------->
a--2-|----->
b--2-|----->
注意,因为是从相同内存地址开始,所以该联合前4个字节内容变为2,此时,无论是e.a还是e.b都等于2
然后计算e.a*e.b并将结果4存于e.in.x中,内存变为:
in-4------->
a--4-|----->
b--4-|----->
此时e.a和e.b以及e.in.x都变为4
最后计算e.a+e.b,将和存放于e.in.y中,内存变为:
in-4----8-->