union在内存中的表现形式?

#include
typedefunion{
intint_value;
}union_value;
intmain(void){
inti=3;
int*ip=&i;
printf("%d\n",((union_value*)ip)->int_value);
return0;
}
上面这段程序,我应该如何理解?union_value在内存中的表现形式难道和int一样?
UYOU
浏览 272回答 2
2回答

人到中年有点甜

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

智慧大石

union占用的内存是它其中包含的最大的那个比如下面的U占用的内存和short一样unionU{charc;shortsi;};/*sizeof(U)==2*/你的代码里只有一个int所以它占用的内存和int一样,所以强制转换后的结果也是正确的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript