C语言中的结构体,枚举,联合体的学习

ops/2025/4/2 2:33:12/

结构体

结构就是一些数据的集合,将数据整合起来。

结构体的声明 

 

{}后的" ; " 不能丢掉,{}内为结构体的成员。

结构体的定义和初始化

 

结构体的对齐规则

  1. 第一个成员的地址在与结构体变量偏移量为0的地址。
  2. 其他成员变量要对齐到对齐数的整数倍的地址处。
    对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
    VS中默认的值为8
    Linux中没有默认对齐数,对齐数就是成员自身的大小
  3. 结构体总大小为最大对齐数的整数倍
  4. 如果嵌套了结构体,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的总大小只能是所有最大对齐数的整数倍。
  5. 可以使用#pragma pack(要修改为的默认对齐数)   来修改默认对齐数

枚举

意思就是列举,可以将生活中的有限的类型列举出来,比如三原色,星期几,还有性别,月份等,就可以使用枚举。

枚举的定义

 上面的enum Day是枚举的类型,"{ }"中的内容是枚举类型可能的取值,也被称为枚举常量。

这些取值都是有值的,默认从0开始,依次向后递增加1,定义时也可以给初始值赋值。

枚举的优点

  1. 使代码更加容易读懂,而不是简单的数字,可以根据字符来理解意思,维护起来更方便,只需要在指定位置修改即可,不用到处修改用到该变量的地方。
  2. 与#define定义的标识符比较有类型检查
  3. 防止与其他地方命名同名造成污染变量,影响其他变量
  4. 便于调试,能够在调试时观察到常量的存在
  5. 使用更加方便,可以一次定义多个常量,使代码不过于臃肿

枚举的使用

联合体

联合体的定义

 这些类型定义的变量也包含一系列成员,特征是这些成员共用同一块空间。

联合体的声明

联合体的特点

联合的成员共用一块内存空间,因此联合体的大小至少是联合体最大成员的大小,且所有成员的起始地址相同。

 

 联合体大小的计算

联合体的大小至少是联合体最大成员的大小        

当最大成员的大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍数


http://www.ppmy.cn/ops/171215.html

相关文章

使用 PyCharm 创建 Python 项目时,默认生成的 .venv 文件夹是属于什么类型的虚拟环境

PyCharm 在创建 Python 项目时,默认生成的 .venv 文件夹属于 ‌venv 类型的虚拟环境‌,具体特点如下: 1. ‌venv 是 Python 内置的虚拟环境工具‌ venv 是 Python 3.3 及以上版本自带的模块(PEP 405),无需…

队列:数据世界的“先进先出”通道

目录 🚀前言🐧队列的概念🤔队列的两种实现形式💯链表队列实现💯数组队列实现(环形数组) 🌟两种实现方式对比💻队列支撑的经典算法💯广度优先搜索(…

算法练习(队列)

队列 单向队列 1. 定义一个队列 Queue<Integer> q new LinkedList<>(); Queue<Character> q new LinkedList<>();2. 入队列 q.offer(1); q.offer(2); // 从队尾入队列 q.add();3. 出队列 q.poll() // 从队头出队列&#xff0c;并将删除的元素…

机械波的产生与传播

机械波是机械振动在介质中的传播。 机械波的产生 产生条件 波源&#xff1a;即产生机械振动的物体&#xff0c;它做机械振动时会带动周围介质质点做受迫振动。例如&#xff0c;在水平方向的弹簧振子中&#xff0c;振子在弹簧的弹力作用下做往复运动&#xff0c;这个振子就是波…

【Linux】——文件(上)

系统角度的文件 在系统层面来说&#xff0c;文件就是内容加属性。 我们的所有文件操作其实就是对文件的内容和属性进行操作。 操作系统在任何进程运行时&#xff0c;都会打开三个输入输出流&#xff1a; 标准输入流&#xff0c;标准输出流以及标准错误流 对于C语言分别就是&am…

HTML跑酷

先看效果 再上代码 <!DOCTYPE html> <html> <head><title>火柴人跑酷</title><style>body {margin: 0;overflow: hidden;background: #87CEEB;}#gameCanvas {background: linear-gradient(to bottom, #87CEEB 0%, #87CEEB 50%, #228B22 …

云端存储新纪元:SAN架构驱动的智能网盘解决方案

一、企业存储的"不可能三角"破局 1.1 传统存储架构的困局 性能瓶颈&#xff1a;NAS架构在1000并发访问时延迟飙升300%容量限制&#xff1a;传统RAID扩容需停机维护&#xff0c;PB级存储扩展耗时超48小时成本矛盾&#xff1a;全闪存阵列每TB成本高达$3000&#xff0…

linux--------------进程控制

1.进程创建 1.1fork函数初识 在linux中fork函数是⾮常重要的函数&#xff0c;它从已存在进程中创建⼀个新进程。新进程为⼦进程&#xff0c;⽽原进 程为⽗进程。 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;⾃进程中返回0&#xff0c;⽗进程返回⼦进程id…