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

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

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

上组测试样例,其实就很清晰了
在这里插入图片描述
很明显,当我们输入第一个值的时候,共用体的成员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]同理。

最终测试结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值