共用体嵌套的结构体成员的值

void 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,%d\n”,e.out.a,e.

共用体就是享用同一块内存
在此例中
e的大小为最长元素的大小,也就是结构体out的大小,共两个int,假设此处int为4字节
e.c和e.d和e.out.a占用同一块内存,即低4字节的内存,a.out.b占用高4字节内存
然后e.c=1;e.d=2;
e.c和e.d和e.out.a都为2
e.out.a=e.ce.d = 22 = 4;
那么e.c和e.d和e.out.a都变成了4
e.out.b=e.c+e.d = 4+4 = 8
追问
即低4字节的内存,a.out.b占用高4字节内存

这句话什么意思啊?
我们老师没讲过低位高位,书上也没有,因为我们不是计算机专业的。能给我详细解答一下吗?谢谢
追答
你可以理解为先后顺序,比如此例中的struct { int a; int b;} out;
其中out.a的地址在前面,out.b的地址在后面,与.a相差一个int的距离。
而由于共用体的关系,e.c e.d 和e.out.a的内存地址相同
|e.c | |
|e.d | |
|e.out.a|e.out.b

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值