首页 > 编程语言 >C++:union类型

C++:union类型

时间:2024-04-07 16:46:52浏览次数:26  
标签:union 成员 TYPEA C++ a1 内存 类型 赋值

class和struct在C++上基本没啥区别,就只有class成员权限默认为private而struct默认为public

而union和前两者稍有不同,其最大的区别在于内部成员变量共享一块内存,只是这个内存可以存放不同的变量类型(占用内存大小选取取占用最大的成员变量的占用内存),所以每次无论对哪个成员更改都会将所有成员都修改,因为他们本来就是同一个数据。

下面用一个例子:TYPEA有两种数据成员类型,当我们对成员a赋值,输出结果如下

union TYPEA
    {
        float a;
        int b;
    };


    TYPEA a1;

    a1.a = 1.0;
    //a1.b = 2;

    std::cout << "a1.a = " <<a1.a <<std::endl;

 可以看到没什么问题

 

当我们对a赋值后再对b赋值,结果如下

    union TYPEA
    {
        float a;
        int b;
    };


    TYPEA a1;

//先赋值a再赋值b a1.a = 1.0; a1.b = 2; std::cout << "a1.a = " << a1.a << std::endl; std::cout << "a1.b = " <<a1.b <<std::endl;

 可以看到最后赋值的b没问题,而a显然被修改了,这是因为a和b本身公用一块内存,修改了b相当于a也被改动了,由于数据类型表示方法不同,可能会是一个难以理解的数

 

 这种数据可以用来解决内存占用问题,当我们需要定义一个数据但不确定他是什么类型时可以使用,如IP地址,我们不清楚是IPV4还是IPV6,则可以用union定义两个成员变量,需要初始化时选择其一。

参考:https://segmentfault.com/a/1190000043862572

标签:union,成员,TYPEA,C++,a1,内存,类型,赋值
From: https://www.cnblogs.com/toriyung/p/18119354

相关文章

  • C++ //练习 11.14 扩展你在11.2.1节练习(第378页)中编写的孩子姓到名的map,添加一个pair
    C++Primer(第5版)练习11.14练习11.14扩展你在11.2.1节练习(第378页)中编写的孩子姓到名的map,添加一个pair的vector,保存孩子的名和生日。环境:LinuxUbuntu(云服务器)工具:vim 代码块/************************************************************************* >Fil......
  • 【C++进阶】详解红黑树&&手撕红黑树(模拟实现)!!!
    红黑树详解&&模拟实现一,红黑树的概念二,红黑树的特性三,红黑树的结构四,红黑树的迭代器五,模拟实现红黑树插入操作六,红黑树的检查一,红黑树的概念红黑树也是一颗二叉搜索树,相比于AVL树的插入,红黑树没有那么多的旋转,对平衡的检查没有那么的严格,所以是接近平衡的。红黑树,......
  • 迷宫问题(C++): 最短路径计算(队列)&& 路径输出(栈)(附一个易错点~)
    迷宫问题大同小异,先直接上代码ba~:#include<bits/stdc++.h>//包含标准库头文件usingnamespacestd;//使用标准命名空间#definesize100//定义迷宫大小typedefstruct{//定义结构体STUintx,y;}STU;queue<STU>q;//定义队列qintn,bd[size][size]={0}......
  • 【C++杂货铺】详解list容器
    目录......
  • HOW - Typescript 类型声明文件
    目录一、背景二、如何添加类型定义支持智能提示方法一:使用JSDoc注释方法二:使用TypeScript编写类型声明文件.d.ts方法三:JSDoc注释转Typescript类型声明文件总结二、使用TypeScript编写类型声明文件1.创建类型声明文件2.编写类型声明2.1dec......
  • 5.数据类型内置方法
    【一】数据类型内置方法1)整数类型(int)1.类型强转可将符合整数格式的字符串转换成整数类型print(int('5'))2.进制转换十进制转二进制 0bprint(bin(999))#0b1111100111十进制转八进制 0oprint(oct(999))#0o1747十进制转十六进制 0xprint(hex(999))#0x3e......
  • 1688详情API接口:解锁多元化应用场景java php c++
    随着互联网的快速发展,数据交换和信息共享已成为企业日常运营不可或缺的一部分。在这样的背景下,API(应用程序接口)接口作为实现数据互通的重要工具,受到了越来越多企业的青睐。1688详情API接口作为阿里巴巴旗下的重要接口之一,为企业提供了丰富多元的应用场景,助力企业高效推广一、1688......
  • c++内存管理(new、delete)
    目录前言c/c++中程序内存区域划分c++函数之new的使用方法第一个场景:对任意类型动态开辟一个类型大小的空间第二个场景:对任意类型动态开辟多个类型大小的空间第三个场景:在第一、二场景下还需要对数据初始化c++函数之delete的使用方法第一个场景:对任意开辟一个类型大小......
  • 5G网络建设【华为OD机试】(JAVA&Python&C++&JS题解)
    一.题目-5G网络建设现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站,编号固定为1到N,接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通,不同基站之间架设光纤的成本各不相同,且有些节点之间已经存在光纤相连,请你设计算法,计算出能联通这些基站的最小成本是......
  • 项目排期【华为OD机试】(JAVA&Python&C++&JS题解)
    一.题目项目组共有N个开发人员,项目经理接到了M个独立的需求,每个需求的工作量不同,且每个需求只能由一个开发人员独立完成,不能多人合作。假定各个需求直接无任何先后依赖关系,请设计算法帮助项目经理进行工作安排,使整个项目能用最少的时间交付。输入描述:第一行输入为M个需......