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

http://www.lryc.cn/news/267843.html

相关文章:

  • 文件夹共享(普通共享和高级共享的区别)防火墙设置(包括了jdk安装和Tomcat)
  • ❀My排序算法学习之冒泡排序❀
  • 服务器数据恢复-raid6离线磁盘强制上线后分区打不开的数据恢复案例
  • Zookeeper在分布式命名服务中的实践
  • 说说 Spring Boot 实现接口幂等性有哪几种方案?
  • Dash中的callback的使用 多input 6
  • 平方矩阵()
  • git基本命令
  • GPU性能实时监测的实用工具
  • 概率论中的 50 个具有挑战性的问题 [第 6 部分]:Chuck-a-Luck
  • windows搭建MySQL主从补充说明
  • Python:GUI Tkinter
  • 制作一个可以离线安装的Visual Studio安装包
  • 机器学习——决策树(三)
  • 模型量化之AWQ和GPTQ
  • 一个简单的 HTTP 请求和响应服务——httpbin
  • 2024黑龙江省职业院校技能大赛暨国赛选拔赛应用软件系统开发赛项(高职组)赛题第3套
  • 云原生Kubernetes系列 | Kubernetes Secret及ConfigMap
  • dev express 15.2图表绘制性能问题
  • 单链表的创建,插入及删除(更新ing)
  • C#/WPF 播放音频文件
  • 如何使用宝塔面板+Discuz+cpolar内网穿透工具搭建可远程访问论坛服务
  • 【HBase】——简介
  • JAVA 有关PDF文件和图片文件合并并生产一个PDF
  • 八股文打卡day10——计算机网络(10)
  • Spring Boot学习:Flyway详解
  • Spark编程实验三:Spark SQL编程
  • 文献研读|Prompt窃取与保护综述
  • cfa一级考生复习经验分享系列(十四)
  • vue本地缓存搜索记录(最多4条)