C语言联合体和枚举

news2024/11/30 4:53:02

C语言联合体和枚举

文章目录

  • C语言联合体和枚举
    • 一、联合体
      • ①联合体简介
      • ②联合体大小的计算
    • 二、枚举

一、联合体

①联合体简介

union Un
{
	char c;
	int i;
};

像结构体一样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同⼀块内存空间。所以联合体也叫:共用体。

给联合体一个成员赋值,其他成员的值也会因此改变。

下面的两个例子可以很明显的展示出联合体所有成员共用一块内存空间:

//代码1
#include <stdio.h>
//联合类型的声明
union Un
{
 char c;
 int i;
};
int main()
{
 union Un un = {0};
 printf("%p\n", &(un.i));
 printf("%p\n", &(un.c));
 printf("%p\n", &un);
 return 0;
}

在这里插入图片描述

//代码2
union Un
{
	char c;
	int i;
};
int main()
{
	union Un un = { 0 };
	un.i = 0X11223344;//共用这四个字节的空间,所以不能同时使用
	un.c = 0X55;
	printf("%#X\n", un.i);//0X11223355
	printf("%zd\n", sizeof(union Un));//4
	return 0;
}

在这里插入图片描述
在这里插入图片描述

②联合体大小的计算

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

#include <stdio.h>
union Un1
{
	char c[5];//5,对齐数是1
	int i;//4,对齐数是4
};
union Un2
{
	short c[7];//14,对齐数2
	int i;//4,对齐数4
};
int main()
{
	//下⾯输出的结果是什么?
	printf("%d\n", sizeof(union Un1));//8
	printf("%d\n", sizeof(union Un2));//16
	return 0;
}

注意,这种数组求对齐数的时候,用数组里的元素的数据类型的大小和默认对齐数比较,例如char类型数组,对齐数是1和8的较小值,所以是1。

二、枚举

enum Day
{
	Mon,
	Tues,
	Wed,
	Thur,
	Sat,
	Sun
};
enum Sex
{
	male = 4,
	female,
	secret
};
enum Color
{
 RED,
 GREEN,
 BLUE
};

以上定义的 enum Day , enum Sex , enum Color 都是枚举类型。
{}中的内容是枚举类型的可能取值,也叫枚举常量 。
这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。

enum Day
{
	Mon,
	Tues,
	Wed,
	Thur,
	Sat,
	Sun
};

int main()
{
	printf("%d %d %d", Mon, Tues, Wed);//0,1,2
	enum Day day = Sun;//枚举变量
	//Mon = 2;error
	//enum Day day = 1;error
	return 0;
}

enum Sex
{
	male = 4,
	female,
	secret
};

int main()
{
	printf("%d %d %d ", male, female, secret);//4 5 6
	enum Sex s = male;
	printf("%zd\n", sizeof(s));//枚举变量只存储这一个
	return 0;
}

enum Day
{
	Mon,
	Tues,
	Wed,
	Thur = 7,
	Fri,
	Sat,
	Sun
};

int main()
{
	printf("%d %d", Mon, Fri);//0 8
	return 0;
}

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

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

相关文章

【Python数据分析工具】

文章目录 概要整体架构流程技术名词解释 概要 数据分析是一种通过收集、处理、分析和解释大量数据&#xff0c;以发现有价值信息、洞察趋势、制定决策并解决问题的过程。在现代科技和互联网的推动下&#xff0c;数据分析变得日益重要。它不仅仅是对数字和图表的简单解释&#…

GCOV覆盖率分析

安全之安全(security)博客目录导读 覆盖率分析汇总 目录 一、GCOV简介 二、GCOV使用示例 三、GCOV编译命令 四、运行并生成覆盖率报告 五、覆盖率报告分析 一、GCOV简介 因为动态代码分析可能只覆盖部分代码&#xff0c;所以我们需要一个代码覆盖工具&#xff0c;以了解…

APP备案避坑指南,值得收藏

目录 什么时间节点前需完成备案&#xff1f; APP/小程序一定要做备案吗&#xff1f; 涉及前置审批的APP有哪些&#xff1f; APP 支持安卓、IOS 多个运行平台&#xff0c;应该备案多少次&#xff1f; 企业是自有服务器&#xff0c;该如何进行APP备案&#xff1f; APP备案可…

探索服务器的无限潜能:创意项目、在线社区与更多可能

文章目录 1. 创意项目的孵化器1.1 托管你的应用1.2 测试和开发1.3 制定和实施你的计划 2. 构建在线社区2.1 自定义社交网络2.2 数据控制2.3 扩展和改进 3. 其他创意可能性3.1 博客和媒体网站3.2游戏服务器3.3 云存储3.4 数据分析3.5 远程办公 结论 &#x1f389;欢迎来到Java学…

你不一定知道的七种进程间通信方式

一、前言 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到&#xff0c;所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷贝到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信…

Easysearch压缩模式深度比较:ZSTD+source_reuse的优势分析

引言 在使用 Easysearch 时&#xff0c;如何在存储和查询性能之间找到平衡是一个常见的挑战。Easysearch 具备多种压缩模式&#xff0c;各有千秋。本文将重点探讨一种特别的压缩模式&#xff1a;zstd source_reuse&#xff0c;我们最近重新优化了 source_reuse,使得它在吞吐量…

【ROS2RUN源码解析:解决ROS2 run命令找不到问题的详细流程】

文章目录 概要整体架构流程技术名词解释小结 概要 当你在使用ROS2时遇到找不到可执行文件的错误时&#xff0c;首先需要执行以下步骤来诊断问题。首先&#xff0c;使用命令printenv AMENT_PREFIX_PATH&#xff08;或者ros2 pkg prefix加上包的名称&#xff09;来检查你的功能包…

AI :微软推出 AutoGen 框架,帮开发者创建基于大语言模型的复杂应用

本心、输入输出、结果 文章目录 AI :微软推出 AutoGen 框架,帮开发者创建基于大语言模型的复杂应用前言AutoGen 简介快速入门AutoGen 安装相关支持相关代码相关架构图弘扬爱国精神AI :微软推出 AutoGen 框架,帮开发者创建基于大语言模型的复杂应用 编辑:简简单单 Online z…

Chrome 浏览器关闭后再打开,需要重新登录账号,解决办法

最近&#xff08;2023-10-15&#xff09;每次打开 Chrome 浏览器&#xff0c;Chrome 自身账号以及各个网站账号都需要重新登录&#xff0c;电脑本身为家用&#xff0c;使用时间不多的情况下&#xff0c;频繁登录账号很痛苦&#xff0c;也很迷惑。现找到解决办法&#xff0c;记录…

基于SSM大学生竞赛活动平台

基于SSM大学生竞赛活动平台的设计与实现 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringSpringMVCMyBatisVue 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 前台系统主要功能实现&#xff1a;首页列表展示、自愿者招聘、竞赛新闻查…

汇编语言基础

引言 汇编语言是直接在硬件之上工作的编程语言&#xff0c;首先要了解硬件系统的结构&#xff0c;才能有效的应用汇编语言对其编程。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。 基础知识 1.1机器语言 机器语言是机器指令的集合…

Stm32_标准库_13_串口蓝牙模块_手机与蓝牙模块通信

代码&#xff1a; #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Serial.h"char News[100] "";uint8_t flag 1;void Get_Hc05News(char *a){uint32_t i 0…

设计模式之是简单工厂模式

分类 设计模式一般分为三大类&#xff1a;创建型模式、结构型模式、行为型模式。 创建型模式&#xff1a;用于创建对象&#xff0c;共五种&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式&#xff1a;用于处理类或对…

STM32 ---- 再次学习STM32F103C8T6/STM32F409IGT6

目录 一、环境搭建及介绍 关于STM32基础介绍 新建工程 外设案例 LED流水灯 蜂鸣器 上拉电阻和下拉电阻知识 电压比较器 c语言基础知识 类型、结构体、枚举 类型int8_t int16_t int32_t 宏替换 #define 和typedef用法 结构体两种填充方法 和 命名规则 枚举用法 常用…

云安全——云计算基础

0x00 前言 学习云安全&#xff0c;那么必然要对云计算相关的内容进行学习和了解&#xff0c;所以云安全会分为两个部分来进行&#xff0c;首先是云计算先关的内容。 0x01 云计算 广泛传播 云计算最早大范围传播是2006年&#xff0c;8月&#xff0c;在圣何塞【1】举办的SES&a…

Vs2017搭建QT开发环境

前置条件&#xff1a; vs2017 前提需要安装Qt的插件 &#xff1a; 若是没有&#xff0c;通过 “工具->扩展和更新->联机->Qt Visual Studio Tools”&#xff0c;安装Qt Visual Studio Tools 1、新建工程"文件->新建->项目"&#xff0c;出现如下界面…

Yakit工具篇:爆破与未授权检测的使用

简介(来自官方文档) 爆破和未授权检测是网络安全领域中一种常见的测试技术&#xff0c;其主要目的是测试系统或应用程序中的口令是否强健&#xff0c;Yakit的爆破与未授权检测模块则实现了该部分的内容。 这个模块可以对多种常见协议和服务&#xff08;如ftp、memcached、mon…

【操作系统】信号量机制(整型信号量、记录型信号量),用信号量实现进程互斥、同步、前驱关系

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 信号量 一、信号量机制1.1 整型信号量1.2 记…

05_51单片机led流水线的实现

1:step创建一个新的项目并将程序烧录进入51单片机 以下是51单片机流水线代码的具体实现 #include <REGX52.H>void Delay500ms() //11.0592MHz {unsigned char i, j, k;i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i); }void main(){while(1){P1 0…

深入理解React中的useEffect钩子函数

引言&#xff1a; React是一种流行的JavaScript库&#xff0c;它通过组件化和声明式编程的方式简化了前端开发。在React中&#xff0c;一个核心概念是组件的生命周期&#xff0c;其中包含了许多钩子函数&#xff0c;用于管理组件的不同阶段。其中之一就是useEffect钩子函数&…