为了账号安全,请及时绑定邮箱和手机立即绑定

union在内存中的表现形式?

union在内存中的表现形式?

UYOU 2019-04-21 20:22:18
#includetypedefunion{intint_value;}union_value;intmain(void){inti=3;int*ip=&i;printf("%d\n",((union_value*)ip)->int_value);return0;}上面这段程序,我应该如何理解?union_value在内存中的表现形式难道和int一样?
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

作业吧?真实的代码里没有这么折腾的。
C语言的语法(强制类型转换),只是语法上的限制(这种限制是为了方便写代码和不会出现不期望的错误)
typedefunion{
intint_value;
}union_value;
这个只是说union_value类型占了4个字节(32位系统),原因见wangdai的回答。然后int_vallue相对于这个变量的起始偏移为0.
那么,现在ip指向了某个内存ip->int_value(不考虑强制类型转换)就是相当于*(ip+0),为什么是+0,就是编译器根据typedef推导出来的。
                            
查看完整回答
反对 回复 2019-04-21
?
智慧大石

TA贡献1946条经验 获得超3个赞

union占用的内存是它其中包含的最大的那个
比如下面的U占用的内存和short一样
unionU{
charc;
shortsi;
};
/*sizeof(U)==2*/
你的代码里只有一个int所以它占用的内存和int一样,所以强制转换后的结果也是正确的
                            
查看完整回答
反对 回复 2019-04-21
  • 2 回答
  • 0 关注
  • 271 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信