C++ union联合体

为什么这样写union,求得的sizeof(m)为4,
union m{
    struct s{
        int x,y,z;
    };
    int a;
} ;
而这样写的话,sizeof(m)就是12呢?
union{
    struct {
        int x,y,z;
    }s;
    int a;
} m;


#C##C/C++#
全部评论
你先搞清楚类型和实例化对象的区别:struct  s {int x,y,z;}; 这是定义了一个结构体类型s,你可以像int x;一样实例化/声明/定义一个新变量:s  object; struct {int x,y,z} s;这是定义了一个没有类型名的结构体变量,变量名是s。 你的代码:第一个:声明了一个union类型,类型名为m。m类型中有一个int类型的变量,还声明了m作用域下的一个s结构体类型,但没有实例化,也没有实际内存对应它。 第二个:你声明了一个union类型的变量m,变量名为m,没有类型名。该变量m中有一个变量名为s的结构体变量和一个int变量a。这个结构体变量s和int变量a共用一块内存栈空间。 还有一个区别:第一个sizeof是对类型取的,第二个sizeof是对实例化的对象取的。
1 回复
分享
发布于 2020-05-03 01:51
点赞 回复
分享
发布于 2020-05-02 20:53
联易融
校招火热招聘中
官网直投
struct {         int x,y,z;     }s;   是结构体对象
点赞 回复
分享
发布于 2020-05-02 21:03
class A{};  是声明类型 A a; 是声明一个A类型的对象 问题里面的第一种只有类型的声明, 没有对象的声明 问题里面的第二种都包含了
点赞 回复
分享
发布于 2020-05-02 23:06
第一次是类型,类型好像都是指针存储,指针就是整数,4字节,第二次是实例化对象
点赞 回复
分享
发布于 2020-05-03 02:08
第一个是在union中声明结构体s,没有实例化;第二个union中的s是结构体的实例
点赞 回复
分享
发布于 2020-05-04 08:43

相关推荐

2 2 评论
分享
牛客网
牛客企业服务