首页 > 其他分享 >联合(union)类型

联合(union)类型

时间:2023-02-03 09:34:41浏览次数:37  
标签:short 低位 union int 存放 联合 类型 sizeof

定义

union example{
    struct {
        short int x;
        short int y;
    } in;
    short int a;
    short int b;
} e;

union中成员包括

  • 结构体成员变量in

    sizeof(in) = 4

  • 短整型成员变量a

    sizeof(a) = 2

  • 短整型成员变量b

    sizeof(b) = 2

union变量的存储空间为3个成员中所占空间最大者空间大小,即sizeof(in) = 4

3个成员变量共享存储空间

共享存储空间

e.a = 1;
e.b = 2;

e.a和e.b均存放在低位short int位置,如下图所示

image-20230203091300681

先对e.a赋值1,即低位short int置为1,再对e.b赋值2,由于e.a e.b共享存储,因此原来的1被2覆盖

执行完后e.a = e.b = 2


e.in.x = e.a * e.b;
e.in.y = e.a + e.b;

e.in.x存放在低位short int,e.in.y存放在高位short int

image-20230203091713330

执行完e.in.x = e.a * e.b;后,低位short int为2*2=4,即e.in.x = 4 = e.a = e.b

然后执行e.in.y = e.a + e.b;,高位short int为4+4=8,即e.in.y = 8


至于为什么:e.in.x存放在低位short int,e.in.y存放在高位short int,是在定义union的时候确定的。union成员变量先定义者会被存放在低位,后定义者会被存放在高位。举例说明

union example{
    struct {
        short int x;
        short int y;
    }in;
    short int a;
    short int b;
}e;

e.in.x = 2;
e.in.y = 3;
int *t = (int *) (&e);
printf("t = %x\n", *t);		

输出t = 30002,即表明e.in.x存放在低位short int,e.in.y存放在高位short int

如将定义修改为

union example{
    struct {
        short int y;
        short int x;
    }in;
    short int a;
    short int b;
}e;

输出变为t = 20003,即表明e.in.x存放在高位short int,e.in.y存放在低位short int

标签:short,低位,union,int,存放,联合,类型,sizeof
From: https://www.cnblogs.com/dctwan/p/17088050.html

相关文章

  • 基本类型
    基本类型整数类型byteshortintlong小数——浮点类型floatdouble字符类型char布尔类型boolean......
  • TypeScript 入门自学笔记 — 基础类型补充(三)
    目录空值void及(与Null和Undefined的区别)任意值Any元组类型枚举类型常量枚举never类型1.函数无法到达终点2.通常校验逻辑的完整性,可以利用never类型Symbol类型BigIn......
  • MYSQL中锁的各种模式与类型
    MYSQL中锁的各种模式与类型https://mp.weixin.qq.com/s?__biz=MzAxNDEwNjk5OQ==&mid=2650436152&idx=1&sn=7e632ae7b72b62e9bc3296f02b992930&chksm=8396ba20b4e13336e831......
  • 常用对象API(基本数据类型对象包装类)
    概述为了方便操作基本数据类性值,将其封装成了对象,在对象中定义了属性和行为丰富了改数据的操作。用于描述该对象的类就称为基本数据类型对象包装类类型类byte......
  • MATLAB-数据类型
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • c++内置类型
    内置类型,由编译器规定,不在任何头文件中,分为三种主要类型:整型、浮点型和void。void类型void主要用于声明无返回值的函数、声明指向任意类型化数据的指针或用于以下类型的......
  • mysql数据库时间类型数据存储建议
    本文转载自:https://javaguide.cn/database/mysql/some-thoughts-on-database-storage-time.html 我们平时开发中不可避免的就是要存储时间,比如我们要记录操作表中这条记......
  • CXPACKET等待类型分析
    背景客户反馈今天8点钟开始进入业务高峰期后,数据库的CPU利用率非常高,基本达到了100%,前端应用也非常慢。怀疑是昨晚业务系统升级导致,请我们紧急协助分析。现象登录到SQL专家......
  • 准确判断一个变量的数据类型
    准确判断一个变量的数据类型犹豫typeof无法判断引用数据类型所以需要调用Object.prototype.toString.call上的方法/***获取变量准确类型的函数*@param{*}t......
  • 实战:第十九章:存入Long类型对象,在代码中使用Long类型接收,结果报类型转换错误
    使用雪花算法随机生成的id,使用Long类型存储到redis的时候,反序列化为Object类型,对于数值类型,取出后统一转为Object,导致泛型类型丢失,数值自动转为了Integer类型,rangeofint......