开发者社区 问答 正文

union在内存中的表现形式?

#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一样?

展开
收起
a123456678 2016-06-08 14:24:01 1783 分享 版权
1 条回答
写回答
取消 提交回答
  • C语言的语法(强制类型转换),只是语法上的限制(这种限制是为了方便写代码和不会出现不期望的错误)

    typedef union{
        int int_value;
    } union_value;

    这个只是说 union_value类型占了4个字节(32位系统),原因见wangdai的回答。然后int_vallue相对于这个变量的起始偏移为0.

    那么,现在 ip指向了某个内存 ip->int_value(不考虑强制类型转换)就是相当于*(ip+0),为什么是+0,就是编译器根据typedef推导出来的。

    2019-07-17 19:31:53
    赞同 展开评论
问答标签:
问答地址: