#include <stdio.h>
typedef union{
int int_value;
} union_value;
int main(void){
int i=3;
int *ip=&i;
printf("%d\n",((union_value *)ip)->int_value);
return 0;
}
上面这段程序,我应该如何理解?union_value在内存中的表现形式难道和int一样?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
C语言的语法(强制类型转换),只是语法上的限制(这种限制是为了方便写代码和不会出现不期望的错误)
typedef union{
int int_value;
} union_value;
这个只是说 union_value类型占了4个字节(32位系统),原因见wangdai的回答。然后int_vallue相对于这个变量的起始偏移为0.
那么,现在 ip指向了某个内存 ip->int_value(不考虑强制类型转换)就是相当于*(ip+0),为什么是+0,就是编译器根据typedef推导出来的。