C语言联合体

news2025/1/10 20:34:19

一、联合体的概念

联合 (union) 是一个能在同一个存储空间里 ( 但不同时) 存储不同类型数据的复合数据类型。
大致结构如下:
n union foo /* 定义一个联合类型foo */
n {
q int digit;
q double bigfl[10];
q char letter;
n }baz; /* 定义一个example类型的联合变量baz */

二、联合体大小计算规则

 联合体大小要至少能容纳最大的成员变量
 联合体大小要是所有成员变量类型最大值的整数倍 (注意是类型而不是变量)

因为联合体的存储是在同一个空间里的,所以在存储数据时,它会以里面所占字节数最大的那个数据类型的整数倍来作为整个联合体所占字节数的大小,如,在上面的代码中,联合体里面最大的数据类型是double,所以整个联合体所占字节数是8的整数倍,分析如下图:

在如上联合体中,该联合体共占80个字节。 因为digit是int型变量,占4个字节,而double  bigf[10]占80个字节,char占1个字节,所以联合体最小需>=80,而double又是里面最大的数据类型,所以该联合体的大小需为8的整数倍,故该联合体占80个字节,如图:

再如:

union U
{
    char s[9];
    int n;
    double d;
};

 该联合体中,char s[9]占1个字节,int n占4个字节,double d占8个字节,首先联合体所占字节数需满足>=9,而因为double是里面最大的数据类型,故该联合体的大小需为double的整数倍,在9和8中,16刚好满足即大余9又是8的整数倍,故所占字节数为16。

所占内存如图:

三、联合体的初始化

 联合体的初始化和结构体的类似,如图:

#include <stdio.h>
union IP
{
	unsigned char str[4];
	unsigned int digit;
};
int main()
{
	union IP ip;
	printf("Please enter IP address in string format:\n");
	scanf("%d.%d.%d.%d",&ip.str[0],&ip.str[1],&ip.str[2],&ip.str[3]);
	printf("IP address in digital format is: %u\n",ip.digit);
	return 0;
}

但是也有要注意的:

#include <stdio.h>

union test{
	int a;
	char b;
	long c;
}u1;

union s{
	int d;
	char e;
}u4;

int main(void)
{
	//不允许对联合体所有成员进行初始化
//	union test u2 = {1,'c',32};
	union test u2 = {1};
	//如果指定元素初始化,则后面指定的会将前面指定的进行覆盖
	union test u3 = {.b = 'c',.a=65};

	printf("a = %d\n",u2.a);
	printf("b = %d\n",u2.b);
	printf("c = %ld\n",u2.c);
	printf("a = %d\n",u3.a);
	printf("b = %d\n",u3.b);
	printf("c = %ld\n",u3.c);


	return 0;
}

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

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

相关文章

还不习惯用软件管理工作项?体验“自动化规则”解决“痛点”

随着AI&#xff0c;ChatGPT等技术的飞速发展&#xff0c;一些科技界人士提出“程序员已死”&#xff0c;其大概意思是讲在未来AI将替代程序员的一些工作&#xff0c;但其实人工智能来代替程序员工作&#xff0c;并非想象中那么容易&#xff0c;在程序员的核心能力中&#xff0c…

路径规划算法:基于跳蛛优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于跳蛛优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于跳蛛优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法跳蛛…

尚硅谷03:前端开发之ES | Vue_es6 Axios Node Npm

目录 内容介绍 统一异常处理 统一日志处理 前端介绍、工具使用 ES6入门 Vue入门 Vue语法 Vue语法高级 内容介绍 1、统一异常处理 2、统一日志处理&#xff08;了解&#xff09; 3、前端介绍 4、ES6 5、VUE入门、基本语法 6、VUE高级语法 7、axios&#xff08;重点…

Pod:Kubernetes里最核心的概念

为了解决这样多应用联合运行的问题&#xff0c;同时还要不破坏容器的隔离&#xff0c;就需要在容器外面再建立一个“收纳舱”&#xff0c;让多个容器既保持相对独立&#xff0c;又能够小范围共享网络、存储等资源&#xff0c;而且永远是“绑在一起”的状态。 Pod 的概念也就呼…

【Ajax】笔记-Ajax案例准备与请求基本操作

案例准备HTML 按钮div <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>AJAX GET 请求</title&g…

C语言进阶之自定义类型(结构体,枚举,联合)

这里写目录标题 1.结构体1.1 结构的基础知识1.2 结构的声明1.3 特殊的声明1.4 结构的自引用1.5 结构体变量的定义和初始化1.6 结构体内存对齐1.7 修改默认对齐数1.8 结构体传参 2. 位段2.1 什么是位段2.2 位段的内存分配2.3 位段的跨平台问题2.4 位段在网络传输中的应用3. 枚举…

【科普贴】UWB定位详解:0维定位、一维定位、二维定位、三维定位

室内定位系统方案中&#xff0c;UWB定位技术目前应用较多&#xff0c;得益于UWB定位10-30厘米的超高定位精度。目前根据使用场景的不同&#xff0c;UWB TDOA定位系统的定位维度分为以下4种&#xff1a;0维定位&#xff08;存在性检测&#xff09;、一维定位、二维定位、三维定位…

spring cloud 搭建消息中间件 RabbitMQ 环境、Mac/Windows下载安装RabbitMQ、配置RabbitMQ环境变量

主要内容概述&#xff1a;spring cloud工程&#xff0c;Mac/Windows下载安装RabbitMQ&#xff0c;并配置环境变量 前言 这里学习如何安装 RabbitMQ&#xff0c;因为远程配置中心的动态更新需要结合 RabbitMQ 来使用。 什么是 RabbitMQ RabbitMQ 是消息队列中间件&#xff0c…

日撸java三百行day74

文章目录 说明通用BP神经网络之激活函数1. 激活函数2. 激活函数分类1.1 反正切函数&#xff08;ArcTan&#xff09;1.2 指数线性函数&#xff08;ELU&#xff09;1.3 恒等函数1.4 泄漏线性整流函数(LEAKY_RELU)1.5 softsign1.6 softplus1.7 Relu函数1.8 sigmoid函数1.9 双曲正切…

一拖三充电线(单USB-C转三充)的解决方案--HUSB251

HUSB251是一款PD DRP双向快充协议芯片&#xff0c;符合USB PD3.1协议&#xff0c;支持PPS、28V EPR FPDO和EPR AVS&#xff0c;并可提供灵活的可编程PDO。当其在Source模式下时&#xff0c;DPDM PHY支持可编程的专有协议&#xff0c;支持BC1.2和5V2.4A、QC2.0/3.0、AFC、FCP和S…

免费系统维护清理工具:Onyx for Mac图文安装教程

OnyX 是一款适用于 macOS 的免费系统维护和优化工具。它由法国开发者 Jol Barrire&#xff08;也称为 Titanium&#xff09;创建&#xff0c;旨在帮助 macOS 用户管理和优化其计算机系统。 OnyX 提供了许多功能和工具&#xff0c;可以帮助用户执行各种系统维护任务。它是一个非…

【雕爷学编程】Arduino动手做(117)---P10V706LED屏模组2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

logstash的四个插件

grok 正则捕获插件 内置正则表达式调用 在logstash conf.d文件夹下面创建filter conf文件&#xff0c;内容如下 ​编辑 logstash 官方也给了一些常用的常量来表达那些正则表达式&#xff0c;可以到这个 Github 地址查看有哪些常用的常量&#xff1a; 自定义表达式调用 muta…

【深度学习】梳理一下概念和术语

1 说明 您是深度学习的新手,正在寻找全面的指南来帮助您了解基础知识及其他方面吗?不要再看了!在本文中,我们将深入研究 20 个基本的深度学习概念,从基础知识开始,逐渐转向更高级的主题。从人工神经网络(ANN)到梯度下降和激活函数(Sigmoid,ReLU,SoftMax),我们将探…

Pytorch 安装与配置

Pytorch 安装与配置 NVIDIA系统管理界面查看 nvidia-smi 进入NVIDIA系统管理界面 对应的详细解释看下图 参考博文 (53条消息) nvidia-smi命令详解和一些高阶技巧介绍_Chaos_Wang_的博客-CSDN博客 CUDA 查看 CUDA 有两类&#xff1a;其中一类是驱动API(Driver API)&#xff…

「深度学习之优化算法」(十二)水波算法

1. 水波算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   水波算法(Water wave optimization)是根据水波理论提出的优化算法。什么是水波理论?简单来说就是水波的宽度越小,其频率越高,频率与水波宽度的平方根成反比(具体细节我也不懂,物理方面的)。水波…

换零钱II:Python代码解Java题目

银行现存零钱面值种类动态变化但数量无限&#xff0c;类方法change()完成指定金额的最少零钱个数兑换。 (本笔记适合学透python基本数据结构&#xff0c;熟悉class的基构造&#xff0c;对类内全局变量有一定认的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1…

Mysql——》慢查询日志

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

TCR中的缓存和共享属性与PTE中的缓存和共享属性的区别是啥?

那么就请继续思考&#xff1a; Translation Table Walk访问页表的缓存策略&#xff0c;这里的页表到底是缓存到cache中&#xff0c;还是缓存到PTW中呢&#xff1f;

使用腾讯云轻量应用服务器搭建网站教程

腾讯云轻量应用服务器怎么搭建网站&#xff1f;太简单了&#xff0c;轻量服务器选择宝塔Linux镜像&#xff0c;然后在宝塔面板上添加站点&#xff0c;以WordPress建站为例&#xff0c;腾讯云服务器网来详细说下腾讯云轻量应用服务器搭建网站全流程&#xff0c;包括轻量服务器配…