第五十一天学习记录:C语言进阶:枚举和联合(共用体)

news/2025/1/12 21:09:58/

枚举顾名思义就是一一列举。

枚举的优点

我们可以使用#define定义常量,为什么非要使用枚举?
1、增加代码的可读性和可维护性
2、和#define定义的标识符比较枚举有类型检查,更加严谨
3、防止了命名污染(封装)
4、便于调试
5、使用方便,一次可以定义多个常量

C语言源代码–预编译–编译–链接–可执行程序

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>enum Color
{RED=2,GREEN,BLUE=8
};int main()
{int arr[BLUE] = { 0 };printf("%d %d %d\n", RED, GREEN,BLUE);//2 3 8printf("%d\n", sizeof(arr));//32return 0;
}

在这里插入图片描述

联合-联合体-共用体

联合类型的定义

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

联合体的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>union Un
{char c;int i;
};int main()
{union Un u;printf("%d\n", sizeof(u));//4printf("%p\n", &u);//三个地址一样printf("%p\n", &(u.c));printf("%p\n", &(u.i));u.i = 0;u.c = 'c';printf("%d\n", u.i);//99return 0;
}

用联合体联合体判断大小端

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int check_sys()
{union{char c;int i;}u;u.i = 1;return u.c;
}int main()
{int ret = check_sys();if (ret){printf("小端\n");}else{printf("大端\n");}return 0;
}

联合体大小的计算

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

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>union Un
{int a;char arr[5];
};int main()
{union Un u;printf("%d\n", sizeof(u));//8return 0;
}

http://www.ppmy.cn/news/80510.html

相关文章

Linux/Windows安装Maven

一、Linux部署Maven 注意&#xff1a;必须先安装jdk&#xff0c;maven与jdk&#xff08;java -version&#xff09;版本会有对应关系 版本对应&#xff08;必看&#xff01;&#xff09;&#xff1a;http://maven.apache.org/docs/history.html 官方tar包下载地址&#xff1a;h…

Java面试知识点(全)-分布式算法- ZAB算法

Java面试知识点(全) 导航&#xff1a; https://nanxiang.blog.csdn.net/article/details/130640392 注&#xff1a;随时更新 研究zookeeper时&#xff0c;必须要了解zk的选举和集群间个副本间的数据一致性。 什么是 ZAB 协议&#xff1f; ZAB 协议介绍 ZAB 协议全称&#xf…

【Simulink】示波器图形数据导入Matlab重新绘图(论文)

版本&#xff1a;Matlab2019b 效果 示波器波形图片&#xff1a; 黑色背景&#xff0c;而且坐标轴字体较小&#xff0c;不方便修改&#xff0c;不能直接用在论文上面 对比 Matlab 绘图&#xff1a; 接下来介绍如何设置~ Simulink 设置 选择需要导入的示波器数据 点击 Vi…

实现图片懒加载的5种方式

目录 1、懒加载介绍 2、实现懒加载技术的方案 3、具体实现代码 1、懒加载介绍 当页面需要展示大量图片时&#xff0c;如果一次性渲染所有图片&#xff0c;会向服务器发出大量请求&#xff0c;导致服务器响应慢&#xff0c;出现页面卡顿或崩溃等问题。采用懒加载技术只预先加…

完工尚需绩效指数(TCPI)

TCPI英文全称是To Complete Performance Index&#xff0c;指为了在既定的预算内完工&#xff08;如BAC或EAC&#xff09;&#xff0c;未来实施剩余工作必须达到的成本绩效指标&#xff08;预测值&#xff09;。 BAC和EAC等概念&#xff0c;详见《挣值管理名词&#xff08;EV、…

LC-3中断实验

一、实验目的 学会分析和理解给定的编程问题&#xff1b;掌握中断驱动的基本原理&#xff1b;掌握键盘数据寄存器&#xff08;KBDR)及键盘状态寄存器&#xff08;KBSR&#xff09;工作基本原理&#xff1b;掌握输出数据寄存器&#xff08;DDR)及输出状态寄存器&#xff08;DSR…

Docker命令详细总结,这一篇笔记就够了

目录 一、Docker命令总结二、Docker命令使用例子1. docker build命令2. docker run命令3. docker ps命令4. docker stop命令5. docker rm命令6. docker images命令7. docker rmi命令8. docker pull命令9. docker push命令10. docker exec命令11. docker logs命令12. docker ins…

day2 - 使用OpenCV进行图像的读取与展示

本期将使用OpenCV对图像进行一些基本的了解和操作&#xff1a;主要包含图像的读取、展示和保存&#xff0c;以及查看图像的基本属性&#xff0c;让我们充分的了解图像&#xff0c;为后续图像处理做准备。 完成本期内容&#xff0c;你可以&#xff1a; 会使用OpenCV对图像进行读…