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

news2024/11/26 7:28:09

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

枚举的优点

我们可以使用#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 8
	printf("%d\n", sizeof(arr));//32
	return 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));//4
	printf("%p\n", &u);//三个地址一样
	printf("%p\n", &(u.c));
	printf("%p\n", &(u.i));
	u.i = 0;
	u.c = 'c';
	printf("%d\n", u.i);//99
	return 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));//8
	return 0;
}

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

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

相关文章

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

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

termux-x11教程

小粉丝已经求稿两个星期了&#xff0c;不写是不行了。 termux-x11 是Termux的一个图形化项目&#xff0c;官方是这么介绍的。 A Termux add-on app providing Android frontend for Xwayland.安装工具 我们需要在Termux和安卓系统上安装工具以成功的运行程序。 x11-repo&am…

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

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

渗透测试 | 指纹识别

0x00 免责声明 本文仅限于学习讨论与技术知识的分享&#xff0c;不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;本文作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担…

LC-3中断实验

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

Splunk安装配置

前言 Splunk 社区 &#xff0c;包括白皮书&#xff0c;各类手册&#xff0c;资源下载&#xff0c;社区问答等 入门&#xff1a;Splunk 入门指南 | Splunk 手册&#xff1a;Splunk Enterprise - Splunk Documentation 资源下载:数据可视化工具Splunk Enterprise免费下载 | S…

chatgpt赋能python:Python对Word文档的支持——打造高效办公新选择

Python对Word文档的支持——打造高效办公新选择 在现代社会&#xff0c;文档处理和管理已成为各行各业不可或缺的一部分。在这个领域中&#xff0c;Word文档一直占据主导地位&#xff0c;成为了几乎所有企业和机构必备的工具。而Python作为一门众所周知的高效编程语言&#xf…

雅思口语话题准备(一)

目录 where are you from&#xff1f; 3.Will you live in the countryside in the future? 4.Have you learned the history of your hometown at school? Does your name have any particular(or special)meaning? 作为一个英语音标大师&#xff0c;请问ɒ和ɔ他们之间有…

chatgpt赋能python:Python%(.2f)怎么用?从入门到进阶

Python%(.2f)怎么用&#xff1f;从入门到进阶 Python作为一种高效的编程语言&#xff0c;拥有广泛的应用领域&#xff0c;尤其在AI、数据分析、Web开发以及自动化运维等方面得到了广泛的应用&#xff0c;成为当下最受欢迎的编程语言之一。在这篇SEO文章中&#xff0c;我们将介…

5月25日第壹简报,星期四,农历四月初七

5月25日第壹简报&#xff0c;星期四&#xff0c;农历四月初七坚持阅读&#xff0c;静待花开1. 教育部&#xff1a;2023年为中西部乡镇卫生院培养订单定向免费五年制本科医学生共计6150人。2. 全球第一个集成人工智能功能的PC系统诞生&#xff01;微软宣布将在6月推出Windows Co…

c++ ffmpeg 浅谈YUV444、YUV422、YUV420(2)

本期将会给大家介绍YUV相关基础知识&#xff0c;同时也介绍威创网络分布式系统的卓越色彩处理技术。 1.什么是YUV色彩空间 2.YUV采样格式 3.YUV不同采样格式对图像画质的影响分析 一、什么是YUV色彩空间? YUV是视频、图片、相机等应用中常常使用的一类图像格式&#xff0c;是…

达美乐面试(部分)(未完全解析)

Java如何保证非线程安全的数据结构&#xff08;比如HashMap&#xff09;的原子性&#xff1f;读多写少时用哪种锁好? A: 方法1&#xff1a;CAS等乐观锁机制&#xff0c;方法2&#xff1a;如果读多写少&#xff0c;可以使用读写锁&#xff08;ReentrantReadWriteLock&#xff0…

【MySQL 数据库】3、多表查询

目录 一、多表关系二、多表查询三、内连接四、外连接五、自连接六、联合查询七、什么是子查询八、标量子查询九、列子查询十、行子查询十一、表子查询十二、多表查询练习题 一、多表关系 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块…

移动端H5页面PDF操作及预览

环境&#xff1a;nodejs 适配&#xff1a;移动端主流浏览器支持企业微信低版本 插件&#xff1a;pdfjs-dist 2.6.347 方案一 本地构建 拉取项目&#xff1a; git clone https://github.com/mozilla/pdfjs-dist.git 全局安装gulp npm install -g gulp-cli 安装项目依赖 np…

chatgpt赋能python:Python中的s.len()方法介绍

Python中的s.len()方法介绍 Python中有各种字符串处理方法&#xff0c;其中s.len()方法是一个重要的方法之一。s.len()返回一个字符串s的长度。这是一个非常基本的方法&#xff0c;但是在很多情况下都会被使用。本文将介绍Python中s.len()方法的一些用法和注意事项。 s.len()…

Redis持久化及集群

Redis可以通过将数据保存在磁盘里实现持久化功能, 以防止宕机导致的数据大量丢失.但是持久化只能保证在磁盘不损坏的情况下, 长时间保存数据, 如果一旦磁盘损坏, 数据仍然会丢失. 为了解决这个问题, 主从复制应允而生. 主从复制是Redis集群中的一总, 其中一个Redis做主, 其他R…

C++数据结构:线性顺序表(数组)

文章目录 前言一、vector简介二、泛型编程自定义数组结构1、定义类2、删除、读取元素和首尾指针3、修改元素、获取元素数量、和插入 总结 前言 将一个线性表存储到计算机中&#xff0c;把线性表的结点按逻辑顺序依次存放到一组地址连续的存储单元里&#xff0c;用这种方法存储…

nodejs+vue+elementui个人心情日志博客网站系统5ht83

语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 前端vueelementui,博客管理系统模块 该模块是博客管理系统中的重要模块&#xff0c;它也是博客管理系统的主模块&#xff0c;该模块的…

从 WebKit 看浏览器内核架构

浏览器常见的浏览器内核有&#xff1a;Blink、WebKit、Gecko、Trident 等&#xff0c;目前 WebKit 内核占据了非常大的的市场&#xff0c;包括 Chrome、Safari、安卓浏览器等市面上的主流浏览器&#xff0c;都使用了 WebKit 内核。 从 WebKit 看浏览器内核架构 既然 WebKit 这么…