C语言自定义类型枚举、枚举类型的定义、枚举的特点、以及自定义类型联合体、联合类型的定义、联合的特点、联合大小的计算、联合判断大小端 的介绍

文章目录

  • 前言
  • 一、枚举
    • [1. 枚举类型的定义](#1. 枚举类型的定义)
    • [2. 枚举的特点](#2. 枚举的特点)
  • 二、联合(共用体)
    • [1. 联合类型的定义](#1. 联合类型的定义)
    • [2. 联合的特点](#2. 联合的特点)
    • [3. 联合大小的计算](#3. 联合大小的计算)
    • [4. 联合体判断大小端](#4. 联合体判断大小端)
      • [1. 不适用联合体判断大小端](#1. 不适用联合体判断大小端)
      • [2. 使用联合体判断大小端](#2. 使用联合体判断大小端)
  • 总结

前言

C语言自定义类型枚举、枚举类型的定义、枚举的特点、以及自定义类型联合体、联合类型的定义、联合的特点、联合大小的计算、联合判断大小端 的介绍

一、枚举

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

1. 枚举类型的定义

c 复制代码
enum Day
{
	Mon,
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};

c 复制代码
enum Sex
{
	MALE,
	FEMALE,
	SECRET
};

c 复制代码
enum Colr
{
	RED,
	GREEN,
	BLUE
};
  • 上述代码中, enum Day, enum Sex, enum Color 都是枚举类型
  • {} 中的内容是枚举类型的可能取值, 也叫 枚举常量
  • 这些可能取值都是有值的默认从 0 开始, 一次递增 1
  • 定义的时候可以赋初值
  • 只 赋予第一个枚举常量初值, 后面的常量会递增 1。
  • 也可以给每个枚举常量都赋初值
  1. 默认情况下枚举常量的值
c 复制代码
#include <stdio.h>

enum Day
{
	Mon,
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};
int main()
{
	printf("%d\n", Mon);  // 0
	printf("%d\n", Tues); // 1
	printf("%d\n", Wed);  // 2
	printf("%d\n", Thur); // 3
	printf("%d\n", Fri);  // 4
	printf("%d\n", Sat);  // 5
	printf("%d\n", Sun);  // 6
	
	return 0;
}
  1. 第一个枚举常量赋初值情况下的值
c 复制代码
#include <stdio.h>

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

int main()
{
	printf("%d\n", Mon);  // 1
	printf("%d\n", Tues); // 2
	printf("%d\n", Wed);  // 3
	printf("%d\n", Thur); // 4
	printf("%d\n", Fri);  // 5
	printf("%d\n", Sat);  // 6
	printf("%d\n", Sun);  // 7

	return 0;
}
  1. 每个枚举常量赋初值情况下的值
c 复制代码
enum Colr
{
	RED = 255,
	GREEN = 0,
	BLUE = 100
};
int main()
{
	printf("%d\n", RED); // 255
	printf("%d\n", GREEN); // 0
	printf("%d\n", BLUE); // 100

	return 0;
}
  • 可以基于枚举常量创建枚举类型的变量来存储常量。
c 复制代码
#include <stdio.h>

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

int main()
{
	enum Day d = Fri;

	printf("%d\n", d); // 4
	return 0;
}

2. 枚举的特点

1. 增加代码的可读性和可维护性
2. 和 #define 定义的标识符比较,枚举有类型检查, 更加严谨
3. 防止了命名污染(封装)
4. 便于调试
5. 使用方便,一次可以定义多个常量
  • 枚举增加类型的检查,在 c 语言中体现不明显, 比如在 c++ 中的如下赋值:

    所以,只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。

二、联合(共用体)

1. 联合类型的定义

联合也是一种特殊的自定义类型

  • 这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间(所以联合也叫共用体)。
c 复制代码
union Un
{
	char c;
	int n;
};
  • union 是联合的关键词
  • Un 是 联合的标签名

2. 联合的特点

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

联合的成员不同时使用

c 复制代码
union Un
{
	char c;
	int n;
};
int main()
{
	union Un u;
	
	printf("%p\n", &u); // 000000B816AFFC64
	printf("%p\n", &u.c); // 000000B816AFFC64
	printf("%p\n", &u.n); // 000000B816AFFC64
}

3. 联合大小的计算

  • 联合的大小至少是最大成员的大小。
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
c 复制代码
#include <stdio.h>
union Un
{
	char c;
	int n;
};
int main()
{
	union Un u;
	
	printf("%d\n", sizeof(u));// 4
}

c 复制代码
#include <stdio.h
union U1
{
	char arr[5];
	int n;
};


int main()
{
	union U1 u1;
	printf("%d\n",  sizeof(u1)); // 8
}

4. 联合体判断大小端

1. 不适用联合体判断大小端

c 复制代码
int check_sys(int a)
{
	return *(char*)&a; // 1
}

int main()
{
	int a = 1;

	if (1 == check_sys(a))
		printf("小端\n");
	else
		printf("大端\n");

	return 0;
}

2. 使用联合体判断大小端

c 复制代码
union Un
{
	char c;
	int n;
}u;

int main()
{
	u.n = 1;

	if (1 == u.c)
		printf("小端\n"); // 小端
	else
		printf("大端\n");

	return 0;
}

总结

C语言自定义类型枚举、枚举类型的定义、枚举的特点、以及自定义类型联合体、联合类型的定义、联合的特点、联合大小的计算、联合判断大小端 的介绍

相关推荐
Uu_05kkq2 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
嵌入式科普4 小时前
十一、从0开始卷出一个新项目之瑞萨RA6M5串口DTC接收不定长
c语言·stm32·cubeide·e2studio·ra6m5·dma接收不定长
A懿轩A4 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
1 9 J5 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
仍然探索未知中6 小时前
C语言经典100例
c语言
爱吃西瓜的小菜鸡7 小时前
【C语言】矩阵乘法
c语言·学习·算法
Stark、8 小时前
【Linux】文件IO--fcntl/lseek/阻塞与非阻塞/文件偏移
linux·运维·服务器·c语言·后端
deja vu水中芭蕾8 小时前
嵌入式C面试
c语言·开发语言
stm 学习ing10 小时前
HDLBits训练3
c语言·经验分享·笔记·算法·fpga·eda·verilog hdl
CSND74014 小时前
Ubuntu vi(vim)编辑器配置一键补全main函数
linux·c语言·ubuntu·编辑器·vim