《数据结构练习-结构体与联合体 》代码详解

首先明确共用体(又称联合体)的概念:
所有成员都在同一段内存中存放,起始地址一样,并且同一时刻只能使用其中的一个成员变量。
即可以理解为,所有成员同时附上值。(不是很明确)
上代码:

union Mat{ 
   int f[3][3],f11;
       struct{
       int ff[4],f22,fff[3],f33;
       };
  }matrix;

上组测试样例,其实就很清晰了
《数据结构练习-结构体与联合体 》代码详解_第1张图片
很明显,当我们输入第一个值的时候,共用体的成员f它的[0][0]位置被附上了值1
因为f11和f都是共用体里的成员,所以f11也是1.
然后结构体也是一个共用体成员,所以我们的结构体中的第一个元素也就是ff[0]被附上了1,但是注意结构体内部其他成员还没有值,因为内部是结构体。
然后就是类似的推下去了。
由于我们要得到主对角线的总和。
很明显f11存f[1][1]的值,f22存f[2][2]的值,f33存f[3][3]的值。
那么f11就放在结构体外让它成为第一个值,注意的是它有值之后就不会再被输入的值赋值,这也是共用体的特效。
然后我们在结构体内部定义一个ff[4]大小的数组。
让f[1][1],f[1][2],f[1][3],f[2][1]存储在里面,这样f[2][2]就能存储在ff中了。
f[3][3]同理。

最终测试结果:
《数据结构练习-结构体与联合体 》代码详解_第2张图片

你可能感兴趣的:(《数据结构练习-结构体与联合体 》代码详解)