联合体(共用体) :(笔记补充)

news2024/11/18 14:46:50

目录

一.联合体的基本概念

二.相关面试题

三.联合体大小计算


关于结构体的内存对齐:http://t.csdn.cn/fbQuo

 一.联合体的基本概念

联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)

//联合类型的声明
union Un
{
    char c;
    int i;
};
//联合变量的定义
union Un un;

union是声明联合体类型的关键字,Un是联合体类型名.

该联合体的内存布局示意图:

 联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。

由于联合体所有的成员变量的首地址都是相同的,所以使用联合体变量时,一次只能使用其一个成员变量(因为只要我们修改一个联合体成员变量的内容,其他所有成员变量的内容都会被改变)

union Un
{
    int i;
    char c;
};
union Un un;
// 下面输出的结果是一样的吗?
int main ()
{
    printf("%d\n", &(un.i));
    printf("%d\n", &(un.c));
    return 0;   
}

union Un
{
    int i;
    char c;
};
union Un un;

int main()
{
    un.i = 0x11223344;          
    un.c = 0x55;
    printf("%x\n", un.i);       分别修改两次成员变量。
    return 0;
}

二.相关面试题

用联合体实现一个程序用于判断当前计算机的大小端存储字节序:
 

typedef union Judge
{
    int i;
    char c;
}Judge;
int Sys_Judge(void)
{
    Judge Un = { 0 };
    Un.c = 1;
    return Un.c;
}
int main()
{
    if (1 == Sys_Judge())
    {
        printf("操作系统为小端存储\n");
    }
    else
    {
        printf("操作系统为大端存储\n");
    }
    return 0;
}

三.联合体大小计算

1.联合的大小至少是最大成员的大小。
2.当最大成员大小不是该联合体的最大对齐数的整数倍的时候,联合体的总大小要补足到最大对齐数的整数倍(这时联合体内部就会有未被任何成员利用的字节空间)。

(联合体成员的对齐数定义与结构体相同)

比如:

union Un1
{
    char c[5];
    int i;
};
union Un2
{
    short c[7];
    int i;
};
//下面输出的结果是什么?

int main ()
{ 
    printf("%d\n", sizeof(union Un1));
    printf("%d\n", sizeof(union Un2));
    return 0;
} 

 

Un2可做类似分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157452.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jar转成dex文件 dex文件转化为smali文件

jar转成dex文件 dx 可以利用android studio中的dx工具。 可以看到android的tool安装位置: 在此路径下的如下目录有dx.bat,这个正是我们需要使用的工具。 D:\sdk\build-tools\30.0.3将dx.bat添加到环境变量 基本指令 > dx --dex --output 输出路径 待转化的jar包C

MySQL通过 XtraBackup 备份恢复单个库

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:王权富贵文章来源:GreatSQL社区原创 1.概述 本文通过 XtraBackup 备份单个数据库,然后…

Elasticsearchdump 数据导入/导出

一.安装过程 当前工具主要是用来对ES中的数据进行数据导入/导出,以及对数据迁移相关,使用elasticdump工具需要使用到npm,所以需要安装相关的依赖 目前使用到的ES版本是7.x 安装NODE 通过npm安装elasticdump # 本地安装和全局安装的区别在于…

3.25 haas506 2.0开发教程-充电电压检测

haas506 2.0开发教程-充电检测1.案例说明2.硬件准备连线3.代码4.测试1.案例说明 可以通过USB端口对连接在开发板上的锂电池进行充电,USB最大供电电压5V。案例使用锂电池供电。通过原理图看到使用ADC2读取锂电池电压,并且采集电压做了分压处理&#xff0…

第六篇 VGGNet——模型精讲

文章目录 1、模型介绍网络结构3 模型特性1、模型介绍 VGGNet是通过简单堆叠卷积构建网络的巅峰之作,在后面的模型就是ResNet这种残差网络的时代。 VGGNet是由牛津大学视觉几何小组(Visual Geometry Group, VGG)提出的一种深层卷积网络结构,他们以7.32%的错误率赢得了201…

为什么我们的微服务中需要网关?

玩过微服务的小伙伴对 Spring Cloud 中的的 Spring Cloud Gateway 多多少少都有一些了解,松哥之前既写过相关的文章,也录过相关的视频跟小伙伴们介绍 Spring Cloud Gateway,不过在之前的介绍中,我可能更加侧重于跟小伙伴们介绍 Sp…

接到新需求时,从何开始设计?

即便我们能够极尽所能把代码写整洁,规避各种坏味道,但我们小心翼翼维护的代码,还是可能因为新的需求被破坏。 新的需求总会在路上,所以,写代码时需要时时刻刻保持嗅觉。 实现驳回 有个功能,内容作品提交…

lxmlxpath一站式教学

文章目录XPath定义XPath 概览安装lxml初步使用xpath 常用表达式获取所有节点获取子节点获取父亲节点属性匹配获取文本获取属性属性多值匹配多属性匹配按序选择节点轴选择总结XPath定义 XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历…

OMNet++安装pydev

菜单栏->Help->Install New SoftWare->Add 输入 Pydev http://pydev.sourceforge.net/pydev_update_site/5.2.0链接为下载5.2.0版本&#xff0c;若jdk<1.8安装5.2.0之前的版本。\color{blue}{链接为下载5.2.0版本&#xff0c;若jdk<1.8安装5.2.0之前的版本。}链…

无代理Bean对象Spring循环依赖处理

Bean A和B互相依赖 A对象或者B对象,创建对象时会形成死循环,解决: Spring中创建对象:实例化、初始化 闭环:此时,图中是一个闭环,如果想解决这个问题,那么就必须要保证不会出现第二次创建A(B)对象这个步骤,也就是说从容器中获取A的时候必须要能够获取到 思考,在spring…

RabbitMQ(三)工作原理及核心概念

目录工作原理图1.Connection 连接2.Channel 信道3.Virtual host 虚拟主机4.Queue 队列5.Exchange 交换机5.1 direct5.2 fanout5.3 topic5.4 headers官网地址&#xff1a;https://www.rabbitmq.com/ 下载地址&#xff1a;https://www.rabbitmq.com/download.html RabbitMQ 的5大…

chk文件恢复和文件恢复的区别有哪些?

文件恢复也就是我们常说的数据恢复&#xff0c;一般用于恢复误删除、损坏的文件数据&#xff0c;那么chk文件恢复又是什么意思呢&#xff1f;两者有什么区别呢&#xff1f;文件恢复市面上常见的文件恢复软件&#xff0c;一般都是用于恢复那些被删除、损坏的文件数据恢复&#x…

Jenkin权限控制——项目矩阵授权策略

开启授权策略 Jenkins的项目权限控制通过【授权策略】实现&#xff0c;【授权策略】需要plugins提供&#xff0c;首先需要安装Role-based Authorization Strategy 安装Role-based Authorization Strategy 管理Jenkins——》插件管理——》搜素——》Role-based Authorizatio…

距离教资考试还有两天,你的照片准备好了没有?

距离教资考试还有两天不知道你的教资报名照准备好了没有?照片不合格可是不能报名成功的&#xff01; ​ ​ 1、本人近6个月以内免冠正面彩色证件照 2、一寸白底&#xff0c;比例3:4 3、不允许戴帽子、头巾、发带、墨镜 4、照片中显示考生头部和肩膀上部 5、照片为jpg或jpe…

云游戏渐入佳境,众玩家同行不同路

配图来自Canva可画 有人曾在2019年问道&#xff1a;“云游戏能成为5G第一个2C的杀手级应用吗&#xff1f;”在当时&#xff0c;几乎所有人对这个问题的回答&#xff0c;都有一种“只缘身在此山中”的迷雾感&#xff0c;还看不清脚下的路会延伸到何处。彼时各大厂商都在备战&am…

MQTT 发布/订阅模式介绍

MQTT 发布/订阅模式 发布订阅模式&#xff08;Publish-Subscribe Pattern&#xff09;是一种消息传递模式&#xff0c;它将发送消息的客户端&#xff08;发布者&#xff09;与接收消息的客户端&#xff08;订阅者&#xff09;解耦&#xff0c;使得两者不需要建立直接的联系也不…

向量检索服务迭代演进

背景在搜索推荐系统里&#xff0c;有一个重要的服务是向量检索服务&#xff0c;也就是求向量在空间中最相近的topk个向量&#xff0c;在搜索系统里&#xff0c;涉及大量的召回引擎可能需要用到向量检索服务&#xff0c;需要在线实时计算&#xff0c;并且可快速响应&#xff1b;…

Jetpack Compose中的startActivityForResult的正确姿势

之前在 Jetpack Compose中的导航路由 里简单的提到了从 Compose 导航到其他 Activity 页面的方式&#xff0c;对于不带返回结果的则就是跟以前一样简单的启动Activity的代码&#xff0c;而如果是startActivityForResult方式的&#xff0c;需要使用带回调的方式去启动&#xff0…

为什么 TCP 协议有性能问题

TCP 协议可以说是今天互联网的基石&#xff0c;作为可靠的传输协议&#xff0c;在今天几乎所有的数据都会通过 TCP 协议传输&#xff0c;然而 TCP 在设计之初没有考虑到现今复杂的网络环境&#xff0c;当你在地铁上或者火车上被断断续续的网络折磨时&#xff0c;你可能都不知道…

Python 机器学习 数据归一化

众所周知机器学习使计算机从研究数据和统计数据中学习机器学习是向人工智能&#xff08;AI&#xff09;方向迈进的一步。机器学习是一个分析数据并学习预测结果的程序。此篇文章主要介绍Python机器学习的数据归一。1、数据归一化当您的数据具有不同的值&#xff0c;甚至具有不同…