首页 > 编程语言 >c++union用法

c++union用法

时间:2023-03-25 13:12:33浏览次数:46  
标签:字节 myun union 成员 联合体 c++ 用法 int

参考文章:c++中union的使用    union使用方法
union即为联合,它是一种特殊的类。通过关键字union进行定义,一个union可以有多个数据成员。在任意时刻,联合中只能有一个数据成员可以有值。当给联合中某个成员赋值之后,该联合中的其它成员就变成未定义状态了。

赋值

在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处。
union主要是共享内存,分配内存以其最大的结构或对象为大小,即sizeof最大的。
union myun 
{
    struct { int x; int y; int z; }u; 
    int k; 
}a; 
int main() 
{ 
    a.u.x =4;
    a.u.y =5; 
    a.u.z =6; 
    a.k = 0; 
    printf("%d %d %d\n",a.u.x,a.u.y,a.u.z);
    return 0;
}
//输出:0,5,6。

int类型4字节,因为u这个struct结构体里面都是int类型,所以对齐都不需要,这个结构体的大小就是4+4+4=12。所以myun这个联合体的大小就是max(sizeof(u), sizeof(int)) = 12

又因为myun这个联合体在任意时刻只能有一个成员有值,所以代码中为联合体中的u成员赋值的时候

[0,3]字节的值为4, [4,7]字节的值为5, [8,11]字节的值为6

后面又给myun联合体的k成员赋值的时候,因为k成员的大小只有4个字节,所以前四个字节[0,3]的值被覆盖为0

所以最后输出的结果为 0 5 6

指定成员长度

 

 

 

u.aa = 0xE07F;
//0xE07F的2进制形式
//1110000001111111

 

标签:字节,myun,union,成员,联合体,c++,用法,int
From: https://www.cnblogs.com/kongbursi-2292702937/p/17254543.html

相关文章

  • RequireJS shim 用法说明
    RequireJSshim用法说明 原创qq5bea0820532e02021-06-0313:56:27©著作权文章标签数据库mysqloraclesqlserver文章分类MySQL数据库阅读数419​ ​https://......
  • sap.ui.comp.smarttable.SmartTable 一些属性的用法阐述
    SmartTable控件根据OData元数据和指定的配置创建一个表格控件。必须指定entitySet属性才能使用该控件。此属性用于从OData元数据中获取字段,从中生成列;它还可以用......
  • PlaneGCS-平面几何约束求解器用法
    PlaneGCS-平面几何约束求解器用法[email protected]在传统的机械设计软件中,一般使用几何约束求解器来画草图,再通过对草图进行拉伸旋转等生成特征实现建模功能......
  • DolphinDB C++ API 数据写入使用指南
    本文为DolphinDBC++API(连接器)写入接口的使用指南,用户在有数据写入需求时,可以根据本篇教程快速明确地选择写入方式。本文将从使用场景介绍、原理简述、函数使用、场景实......
  • C/C++文档编辑器的设计与实现[2023-03-24]
    C/C++文档编辑器的设计与实现[2023-03-24]程序设计题三:文档编辑器的设计与实现1.系统的基本功能该系统要求对一个文本文件中的内容进行各种常规操作,如:插入、删除、查找......
  • const在c语言和c++中的区别
    1.c语言中的const变量 c语言中const变量是只读变量,有自己的存储空间2.c++中的const常量可能分配存储空也可能不分配存储空间当const常量为全局,并且需要......
  • C/C++教师工作量系统[2023-03-24]
    C/C++教师工作量系统[2023-03-24]题目描述设计一个教师工作量系统,计算每个老师在一个学期中所教课程的总工作量。(教师单个教学任务的信息为:教师号、姓名、性别、职称(助教......
  • c++ 从字符串到文件读写
    学习C++的输入输出,比起java来有种空虚的感觉,不会就这么少吧!转码也没见到!java是跨平台语言,之所以跨平台是因为java语言本身就带着一个平台,java运行在虚拟机之上;灵活是以......
  • C/C++:union关键字
    1、union内存分布:unionU{ intx; floaty;};intmain(){ Uu; u.x=123; show(u.x); u.y=16.256; show(u.x,u.y);//union两个变量共用一块内存,u.x的......
  • c++基础
    三法则(RuleofThree)在C++里,它是一个以设计的基本原则而制定的定律。它的要求是,假如类有明显定义下列其中一个成员函数,那么程序员必须写入其他两个成员函数到类内,也就是说......