当前位置: 首页 > news >正文

C语言中的结构体和联合体:异同及应用

文章目录

  • C语言中的结构体和联合体:异同及应用
    • 1. 结构体(Struct)的概述
      • 代码示例:
    • 2. 联合体(Union)的概述
      • 代码示例:
    • 3. 结构体与联合体的异同点
      • 相同点:
      • 不同点:
        • 代码说明
    • 结论

C语言中的结构体和联合体:异同及应用

在C语言中,结构体(struct)和联合体(union)是两种常用的复合数据类型,用于组织和管理不同类型的数据。本文将介绍结构体和联合体的异同点,并通过代码示例演示它们的基本用法。

1. 结构体(Struct)的概述

结构体是一种用户自定义的数据类型,允许将多个不同类型的数据项组合在一起,形成一个单一的数据类型。结构体的成员在内存中是按照定义的顺序依次排列的,每个成员都有独立的内存空间。

代码示例:

#include <stdio.h>// 定义结构体
struct Person {char name[50];int age;float height;
};int main() {// 声明结构体变量struct Person person1;// 给结构体成员赋值strcpy(person1.name, "John Doe");person1.age = 25;person1.height = 1.75;// 访问结构体成员并输出printf("Person Information:\n");printf("Name: %s\n", person1.name);printf("Age: %d\n", person1.age);printf("Height: %.2f meters\n", person1.height);return 0;
}
Person Information:
Name: John Doe
Age: 25
Height: 1.75 meters

在上述例子中,我们定义了一个名为Person的结构体,包含了姓名、年龄和身高三个成员。通过结构体,我们能够更有组织地表示一个人的信息。

2. 联合体(Union)的概述

联合体是一种特殊的数据类型,允许在同一内存位置存储不同类型的数据。与结构体不同的是,联合体的所有成员共享同一块内存,即它们的内存地址是相同的。联合体的大小等于它最大的成员的大小。

代码示例:

#include <stdio.h>union Number {int integer;float floating_point;
};int main() {// 声明联合体变量union Number num;// 给整数成员赋值并输出num.integer = 42;printf("Integer value: %d\n", num.integer);// 给浮点数成员赋值并输出num.floating_point = 3.14;printf("Floating point value: %.2f\n", num.floating_point);return 0;
}
Integer value: 42
Floating point value: 3.14

在上述例子中,我们定义了一个名为Number的联合体,包含了整数和浮点数两个成员。通过联合体,我们能够在同一块内存中存储不同类型的数据。

3. 结构体与联合体的异同点

相同点:

  • 复合数据类型: 结构体和联合体都是用来定义复合数据类型的工具,可以包含多个不同类型的数据成员。

  • 成员访问: 成员访问方式相似,可以使用成员运算符.来访问结构体和联合体的成员。

不同点:

  • 内存分配方式:

    • 结构体: 成员在内存中按照定义的顺序依次排列,每个成员有独立的内存空间。
    • 联合体: 所有成员共享同一块内存,大小等于最大成员的大小。
  • 内存使用:

    • 结构体: 适用于需要同时存储多个不同类型的数据的情况。
    • 联合体: 适用于需要在同一块内存中存储不同类型的数据,但同时只使用其中一种类型的情况。
  • 成员占用空间:

    • 结构体: 成员占用独立的空间,每个成员的大小是其自身类型的大小。
    • 联合体: 成员共享同一块内存,只有一个成员的值是有效的,不同成员的大小不叠加。
代码说明
#include <stdio.h>// 定义结构体
struct DataStruct {int intValue;float floatValue;char stringValue[20];
};// 定义联合体
union DataUnion {int intValue;float floatValue;char stringValue[20];
};int main() {// 输出结构体和联合体的大小printf("Size of struct DataStruct: %lu bytes\n", sizeof(struct DataStruct));printf("Size of union DataUnion: %lu bytes\n", sizeof(union DataUnion));return 0;
}
Size of struct DataStruct: 28 bytes
Size of union DataUnion: 20 bytes
  • 初始化:
    • 结构体: 可以分别对结构体的各个成员进行初始化。
    • 联合体: 只能对联合体的第一个成员进行初始化,因为同一时刻只能激活一个成员。

结论

结构体和联合体在C语言中是强大的工具,用于创建自定义的数据类型。选择使用结构体还是联合体取决于具体的需求,考虑到数据的组织方式、内存占用和访问方式等因素。合理使用这两种数据类型能够更好地满足程序设计的需要。

相关文章:

C语言中的结构体和联合体:异同及应用

文章目录 C语言中的结构体和联合体&#xff1a;异同及应用1. 结构体&#xff08;Struct&#xff09;的概述代码示例&#xff1a; 2. 联合体&#xff08;Union&#xff09;的概述代码示例&#xff1a; 3. 结构体与联合体的异同点相同点&#xff1a;不同点&#xff1a;代码说明 结…...

文件夹共享(普通共享和高级共享的区别)防火墙设置(包括了jdk安装和Tomcat)

文章目录 一、共享文件1.1为什么需要配置文件夹共享功能&#xff1f;1.2配置文件共享功能1.3高级共享和普通共享的区别&#xff1a; 二、防火墙设置2.1先要在虚拟机上安装JDK和Tomcat供外部访问。2.2设置防火墙&#xff1a; 一、共享文件 1.1为什么需要配置文件夹共享功能&…...

❀My排序算法学习之冒泡排序❀

目录 冒泡排序(Bubble Sort):) 一、定义 二、算法原理 三、算法分析 时间复杂度 算法稳定性 算法描述 C语言 C++ 算法比较 插入排序 选择排序 快速排序 归并排序 冒泡排序(Bubble Sort):) 一、定义 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单…...

服务器数据恢复-raid6离线磁盘强制上线后分区打不开的数据恢复案例

服务器数据恢复环境&#xff1a; 服务器上有一组由12块硬盘组建的raid6磁盘阵列&#xff0c;raid6阵列上层有一个lun&#xff0c;映射到WINDOWS系统上使用&#xff0c;WINDOWS系统划分了一个GPT分区。 服务器故障&分析&#xff1a; 服务器在运行过程中突然无法访问。对服务…...

Zookeeper在分布式命名服务中的实践

Java学习面试指南&#xff1a;https://javaxiaobear.cn 命名服务是为系统中的资源提供标识能力。ZooKeeper的命名服务主要是利用ZooKeeper节点的树形分层结构和子节点的顺序维护能力&#xff0c;来为分布式系统中的资源命名。 哪些应用场景需要用到分布式命名服务呢&#xff1…...

说说 Spring Boot 实现接口幂等性有哪几种方案?

一、什么是幂等性 幂等是一个数学与计算机学概念&#xff0c;在数学中某一元运算为幂等时&#xff0c;其作用在任一元素两次后会和其作用一次的结果相同。 在计算机中编程中&#xff0c;一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂等…...

Dash中的callback的使用 多input 6

代码说明 import plotly.express as pxmport plotly.express as px用于导入plotly.express模块并给它起一个别名px。这样在后续的代码中&#xff0c;你可以使用px来代替plotly.express&#xff0c;使代码更加简洁。 plotly.express是Plotly的一个子模块&#xff0c;用于快速创…...

平方矩阵()

平方矩阵1 平方矩阵2 曼哈顿距离 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring>using namespace std;const int N 110;int n; int a[N][N];int main() {while(cin >> n, n){for (int i 0; i < n; i )fo…...

git基本命令

1、安装 介绍 安装 配置 2、git基本命令 2.1 基本操作 #1、查看空目录的git状态 $ git status fatal: not a git repository (or any of the parent directories): .git#2、初始化本地仓库&#xff1a;创建一个git的目录管理当前项目的所有文件版本 $ git init Initializ…...

GPU性能实时监测的实用工具

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

概率论中的 50 个具有挑战性的问题 [第 6 部分]:Chuck-a-Luck

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒&#xff08;Frederick Mosteller&#xff09;的《概率论中的五十个具有挑战性的问题与解决方案》&#xff09;一书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇…...

windows搭建MySQL主从补充说明

这3种情况是在HA切换时&#xff0c;由于是异步复制&#xff0c;且sync_binlog0&#xff0c;会造成一小部分binlog没接收完导致同步报错。 第一种&#xff1a;在master上删除一条记录&#xff0c;而slave上找不到。 第二种&#xff1a;主键重复。在slave已经有该记录&#xff…...

Python:GUI Tkinter

GUI编程 GUI编程&#xff08;Graphical User Interface Programming&#xff09;指的是用于创建图形用户界面的程序设计。这种界面采用图形方式显示信息&#xff0c;让用户可以通过图形化的方式与程序进行交互&#xff0c;而不是仅仅通过文本命令。GUI编程使得软件更加直观易用…...

制作一个可以离线安装的Visual Studio安装包

须知 前提条件&#xff0c;需要电脑可以正常上网且网速还行&#xff0c;硬盘可以空间容量足够大&#xff0c;怎么判断容量够用&#xff1f;由组件数量的多少来决定。Visual Studio 频道和发布节奏 https://learn.microsoft.com/zh-cn/visualstudio/productinfo/release-rhythm…...

机器学习——决策树(三)

【说明】文章内容来自《机器学习——基于sklearn》&#xff0c;用于学习记录。若有争议联系删除。 1、案例一 决策树用于是否赖床问题。 采用决策树进行分类&#xff0c;要经过数据采集、特征向量化、模型训练和决策树可视化4个步骤。 赖床数据链接&#xff1a;https://pan…...

模型量化之AWQ和GPTQ

什么是模型量化 模型量化&#xff08;Model Quantization&#xff09;是一种通过减少模型参数表示的位数来降低模型计算和存储开销的技术。一般来说&#xff0c;模型参数在深度学习模型中以浮点数&#xff08;例如32位浮点数&#xff09;的形式存储&#xff0c;而模型量化可以…...

一个简单的 HTTP 请求和响应服务——httpbin

拉取镜像 docker pull kennethreitz/httpbin:latest 查看本地是否存在存在镜像 docker images | grep kennethreitz/httpbin:latest 创建 deployment&#xff0c;指定镜像 apiVersion: apps/v1 kind: Deployment metadata:labels:app: httpbinname: mm-httpbinnamespace: mm-…...

2024黑龙江省职业院校技能大赛暨国赛选拔赛应用软件系统开发赛项(高职组)赛题第3套

2024黑龙江省职业院校技能大赛暨国赛选拔赛 应用软件系统开发赛项&#xff08;高职组&#xff09; 赛题第3套 目录&#xff1a; 需要竞赛源码资料可以私信博主。 竞赛说明 模块一&#xff1a;系统需求分析 任务1&#xff1a;制造执行MES—质量管理—来料检验&#xff08;…...

云原生Kubernetes系列 | Kubernetes Secret及ConfigMap

云原生Kubernetes系列 | Kubernetes Secret及Configmap 1. Secret及Configmap使用背景简介2. Secret2.1. Secret创建方式2.1.1. 命令行方式2.1.2. 文件方式2.1.3. 变量方式2.1.4. YAML文件方式2.2. Secret使用方式2.2.1. 用于传递配置文件2.2.3. 用于传递变量3. ConfigMap1. Se…...

dev express 15.2图表绘制性能问题

dev express 15.2 绘制曲线 前端代码 <dxc:ChartControl Grid.Row"1"><dxc:XYDiagram2D EnableAxisXNavigation"True"><dxc:LineSeries2D x:Name"series" CrosshairLabelPattern"{}{A} : {V:F2}"/></dxc:XYDi…...

大模型是否即将到达算法极限

大模型是否即将到达算法极限&#xff1a;深入总结 一、核心结论 目前的大模型确实已经非常强大&#xff0c;但更准确的判断不是&#xff1a;大模型算法潜力即将到达极限。而是&#xff1a;纯 Transformer 纯互联网语料 纯预训练 scaling 这条旧路线&#xff0c;正在接近阶段性…...

浙大软院推免机试96分学长复盘:PAT甲级真题怎么刷才有效?(附2021年四道真题思路)

浙大软院推免机试96分备考全攻略&#xff1a;从刷题策略到临场发挥 在计算机专业推免的激烈竞争中&#xff0c;机试成绩往往成为决定成败的关键因素。作为一位在浙大软院推免机试中获得96分的过来人&#xff0c;我深刻理解备考过程中的迷茫与困惑——刷了上百道题却收效甚微&am…...

西方垃圾思维在中国 AI 大模型中的渗透机制与贾子理论替代范式研究

西方垃圾思维在中国 AI 大模型中的渗透机制与贾子理论替代范式研究摘要&#xff1a; 西方垃圾思维&#xff08;WCG&#xff09;正通过“伪自主”模式深度渗透中国主流AI大模型。百度文心、讯飞星火等模型表面宣称“自主研发”“遵循社会主义核心价值观”&#xff0c;实则借助标…...

SGLang 未来演进与生态集成:从推理到 Agent 与多模态

系列导读 你现在看到的是《SGLang 推理加速与生产级服务化部署实战》的第 10/10 篇,当前这篇会重点解决:帮助读者建立对 SGLang 生态的全局视野,并规划后续深入方向,完成从入门到精通的闭环。 上一篇回顾:第 9 篇《SGLang 生产级部署排错指南:10 个常见问题与解决方案》…...

开源数字微流控平台OpenDrop:3步打造你的微型生物实验室

开源数字微流控平台OpenDrop&#xff1a;3步打造你的微型生物实验室 【免费下载链接】OpenDrop Open Source Digital Microfluidics Bio Lab 项目地址: https://gitcode.com/gh_mirrors/ope/OpenDrop 你是否曾梦想在桌面上建立一个完整的生物实验室&#xff1f;OpenDrop…...

Win11Debloat终极指南:快速清理Windows系统臃肿的完整教程

Win11Debloat终极指南&#xff1a;快速清理Windows系统臃肿的完整教程 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter an…...

告别Python程序分发难题:Auto PY to EXE图形化打包终极指南

告别Python程序分发难题&#xff1a;Auto PY to EXE图形化打包终极指南 【免费下载链接】auto-py-to-exe Converts .py to .exe using a simple graphical interface 项目地址: https://gitcode.com/gh_mirrors/au/auto-py-to-exe 还在为Python程序分享而烦恼吗&#x…...

STM32F407用HAL库驱动42步进电机,从CubeMX配置到代码调试的完整避坑指南

STM32F407 HAL库驱动42步进电机实战&#xff1a;从CubeMX配置到高效调试的完整指南 第一次用STM32F407的HAL库驱动42步进电机时&#xff0c;我花了整整三天时间才让电机转起来。最让我抓狂的是明明CubeMX配置看起来一切正常&#xff0c;TIM1通道就是死活不出PWM波形。后来才发现…...

ElevenLabs印地文语音质量崩塌真相(印地语TTS失效深度溯源):7类发音错误+5个未公开参数修复方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs印地文语音质量崩塌的全局现象与影响评估 近期&#xff0c;ElevenLabs平台在印地语&#xff08;Hindi&#xff09;TTS合成任务中出现系统性语音质量退化&#xff0c;表现为音素错读、韵律断裂…...

3分钟掌握AI图像分层:从单张图片到专业PSD的智能转换

3分钟掌握AI图像分层&#xff1a;从单张图片到专业PSD的智能转换 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 你是否曾经面对一张精美的插画&#xff…...