【C语言进阶:自定义类型详解】联合(共用体)

本节重点内容:

  • 联合类型的定义
  • 联合的特点
  • 联合大小的计算

⚡联合类型的定义

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

为了方便大家理解举个例子:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

union Un
{
    char i;
    int a;
};

int main()
{ 
    union Un u;
    printf("%d\n", sizeof(u));
    printf("%p\n", &u);
    printf("%p\n", &(u.i));
    printf("%p\n", &(u.a));
    return 0;
}

运行结果如下:

 图画理解:

当成员变量 i 占一个字节,成员变量 a 占四个字节,而整个联合体也占四个字节,我们发现成员变量 i 和成员变量 a 在共同使用空间。因此 i 变,a 也跟着变,a 变,i 也跟着变。我们在使用联合体时,在同一时间点只能用一个成员。


⚡联合的特点

利用联合体成员共用同一块内存的特点,我们可以得出一种判断当前计算机的大小端存储的方法:

代码示例如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

union Un
{
    char c;
    int i;
};

int main()
{ 
    union Un u = { 0 };
    u.c = 1;
    if (u.i == 1)
    {
        printf("小端\n");
    }
    else
    {
        printf("大端\n");
    }
    return 0;
}

运行结果如下:


⚡联合大小的计算

联合体也是存在对齐规则的。

  • 联合的大小至少是最大成员的大小。
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

示例一:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

union Un
{
    char arr[5];  //5    最大成员大小为5字节
    int i;  //4   最大对齐数为4字节
};

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

运行结果如下:

 示例二:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

union Un
{
    short s[7];  //14   最大成员大小为14字节
    int n;   //4   最大对齐数为4字节
};

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

运行结果如下:


 感谢大家能够看完这篇博客,创作时长,小伙伴们觉得我的博客对你有帮助,不妨留下你的点赞的收藏,关注我,带你了解不一样的C语言。

98b76a6f4a9c4ca88fd93da1188ac6f9.gif

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 网络编程之NIO(ByteBuffer)

在 Java NIO 中&#xff0c;ByteBuffer 是用于存储和传输数据的一种数据结构。它提供了高效的数据存储和读取能力&#xff0c;使得 Java NIO 能够高效地处理大量的数据输入输出。 ByteBuffer 的作用包括以下几个方面: 存储数据:ByteBuffer 可以存储任意长度的数据&#xff0c;…

Elasticsearch 8.X 如何基于用户指定 ID 顺序召回数据?

1、实战问题如何根据输入的id 的顺序输出结果&#xff0c;id 个数有500个&#xff0c;还有分页&#xff1f;问题来源&#xff1a;https://t.zsxq.com/0cdyq7tzr2、方案探讨2.1 Elasticsearch 默认排序机制在 Elasticsearch 中&#xff0c;如果未指定排序规则&#xff0c;检索结…

Linux下实现的 HTTP 服务器

项目功能&#xff1a;&#xff08;1&#xff09;能接收客户端的GET请求&#xff1b;&#xff08;2&#xff09;能够解析客户端的请求报文&#xff0c;根据客户端要求找到相应的资源&#xff1b;&#xff08;2&#xff09;能够回复http应答报文&#xff1b;&#xff08;3&#x…

数据结构和算法学习记录——设计循环队列(数组实现循环队列)核心思路、题解过程、完整题解

目录 题目描述 题目示例 核心思路 链表实现 数组实现 重点 题解过程 结构体类型定义 创建一个循环队列并初始化 判断循环队列为空或为满 入队列函数 出队列函数 取队头数据 取队尾数据 销毁循环队列 完整题解 题目来源&#xff1a;力扣 题目描述 设计你的…

Sentinel滑动时间窗限流算法原理及源码解析(下)

文章目录对统计数据如何使用获取之前统计好的数据对统计数据如何使用 流控快速失败 获取之前统计好的数据

SpringBoot 项目的创建与启动

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

iosApplePay

1、Apple Pay 接入工程 - 简书 // 设置币种、国家码及merchant标识符等基本信息 PKPaymentRequest *payRequest [[PKPaymentRequest alloc]init]; payRequest.countryCode "CN"; //国家代码 payRequest.currencyCode "CNY"; //RMB的币种代码 …

“被裁员之前,没得到任何风声,措手不及...” 一个在职6年测试工程师内心独白

前言 一个码农&#xff08;软件测试工程师&#xff09;的自白 小张&#xff1a; 我们用工作五年的积蓄&#xff0c;在这个一线城市买了房子&#xff0c;买了车子&#xff0c;然后领证。我也在6年前进入了一个很多人梦寐以求新的公司 码农的新生活开始了。在这家公司里&…

ChatGPT如何为企业提供帮助?

数字化转型是指利用技术来改变企业的运营方式并为客户提供价值&#xff0c;这不仅仅是关于如何采用新的技术或工具。要想取得成功&#xff0c;就需要从根本上改变文化和心态。 ChatGPT如何为企业提供帮助?从数据分析到知识管理再到客户服务等等&#xff0c;人工智能聊天机器人…

光伏发电系统模拟及其发电预测开源python工具pvlib

1. 太阳辐照量模拟 pysolar是一个用于计算太阳位置和辐照量的Python库。它是基于python语言编写的&#xff0c;可以方便地在各种python项目中使用。pysolar主要用于计算太阳的位置、太阳高度角、太阳方位角、日出和日落时间等信息。这些信息可以用于太阳能电池板和太阳能集热器…

【设计模式】创建型-抽象工厂模式

文章目录一、抽象工厂模式1.1、产品族、产品等级1.2、抽象工厂模式中的角色1.3、实例一、抽象工厂模式 在工厂方法模式中&#xff0c;每一个具体的工厂子类只能生成一种具体的产品&#xff0c;如果想要生产另外一种产品&#xff0c;就需要重新定义一个抽象工厂类&#xff0c;这…

泡泡玛特“失速”,盲盒经济迎来拐点?

配图来自Canva可画​ 前些年泡泡玛特的飞速增长&#xff0c;曾经在行业内外引起了广泛的反响&#xff0c;其主打的盲盒经济也曾风靡一时、被众多行业效仿。不过&#xff0c;这种情况在疫情肆虐的2022年似乎受到了一些影响&#xff0c;这在其财报中就有所体现。 3月29日&#…

Python 小型项目大全 61~65

六十一、ROT13 密码 原文&#xff1a;http://inventwithpython.com/bigbookpython/project61.html ROT13 密码是最简单的加密算法之一&#xff0c;代表“旋转 13 个空格”密码将字母A到Z表示为数字 0 到 25&#xff0c;加密后的字母距离明文字母 13 个空格&#xff1a; A变成N&…

【Android】之【自定义View实践】

这里以一个进度条的加载为例子&#xff0c;先看效果&#xff08;运行效果是动态变化的&#xff09; 一、自定义属性 首先在res->values目录下新建attrs资源文件&#xff0c;如下图&#xff1a; 内容如下&#xff1a; <?xml version"1.0" encoding"utf…

SpringBoot基础学习之(九)添加员工的信息

本次项目所有能够使用的静态资源可以免费进行下载 静态资源 在本篇代码DAO层将通过Java文件去实现&#xff0c;在这里就不连接数据&#xff0c;然后通过jdbc将数据库内容的内容显示出来 案例&#xff1a;员工管理系统 上一篇博文的主要的内容是展示员工的信息&#xff0c;本篇…

Oracle JDK 和 OpenJDK 有什么区别?

可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么 Oracle JDK 和 OpenJDK 之间是否存在重大差异&#xff1f;下面我通过收集到的一些资料&#xff0c;为你解答这个被很多人忽视的问题。 首先&#xff0c;2006 年 SUN 公司将 Java 开源&#xff0c;也就有…

JAVA——网络编程基本概念

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

腾讯云轻量服务器和云服务器区别对比(超详细)

腾讯云轻量服务器和云服务器有什么区别&#xff1f;为什么轻量应用服务器费用更低&#xff1f;是因为轻量服务器CPU内存性能比云服务器CVM性能差吗&#xff1f;轻量应用服务器适合中小企业或个人开发者搭建企业官网、博客论坛、微信小程序或开发测试环境&#xff0c;云服务器CV…

orcad library builder 建库及报错问题

目录 一.安装orcad library builder 二.orcad library builder 使用 1.建立一个orcad 原理图库测试下 尝试理解tcl那段的意思 xml文件导入建orcad库 折腾了2个多小时&#xff0c;居然没有直接方案搞定&#xff0c;简单记录下&#xff0c;后面遇到该问题的兄弟可参考借鉴&am…

Java集合框架之collection

1. 什么是集合 1.1 概念 对象的容器&#xff0c;实现类对对象常用的操作。 1.2 和数组的区别 数组长度固定&#xff0c;集合长度不固定。数组可以存储基本类型和引用类型&#xff0c;集合只能存储引用类型。 1.3 位置 java.util.*; 2. Collection体系 2.1 Collection父接…