C++结构和共同体

1. 结构初始化

    关键字 strut,Test为自定义名称,大括号中包含着结构存储的数据类型列表。

struct Test
{
    int a;
    double b;
    char num[3];
};

   初始化的可以使用列表初始化,也可以单个赋值。

int main()
{
    //列表赋值
    Test test{1,2.0,{1,2,3}};
    //列表大括号内没有值 各个成员将被设置成0
    Test test1{0};
    Test test4{0};

    cout<<test.a<<endl; //1
    cout<<test.b<<endl; //2
    cout<<test1.a<<endl; //0
    cout<<test4.a<<endl;//0
}

2. 结构中的位字段

    参考:结构体中的位字段_Oliver King 的小窝-CSDN博客_结构体位字段

3. 共同体

共同体是一种数据格式,和结构一样能存储不同数据类型的数据,但是共同体只能同时存储一种类型。其使用的用途是当数据项使用两种或多种格式(但不会同时使用),可以节省空间。

struct Test
{
    int a;
    double b;
    char num[3];
    union id
    {
        int id_num;
        double id_dou;
    }id_val;
};

int main()
{
    //列表赋值
    Test test{1,2.0,{1,2,3},.id_val.id_num = 12};
    cout<<test.id_val.id_num<<endl; // 设置id_num 类型int 12
    cout<<&(test.id_val)<<endl; // 0x304bdcaa8
    test.id_val.id_dou = 12.33; //重新设置id_val为double ,这时id_num不存在了
    cout<<test.id_val.id_num<<endl; // 4623130790980443177
    cout<<test.id_val.id_dou<<endl; // 12.33
    cout<<&(test.id_val)<<endl; // 0x304bdcaa8
}

结构体和联合体的区别在于:

  • 结构体的各个成员会占用不同的内存,互相之间没有影响;而联合体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
  • 结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),联合体占用的内存等于最长的成员占用的内存。
  • 联合体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值