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语言自定义类型枚举、枚举类型的定义、枚举的特点、以及自定义类型联合体、联合类型的定义、联合的特点、联合大小的计算、联合判断大小端 的介绍

相关推荐
2401_858286113 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
jiao000014 小时前
数据结构——队列
c语言·数据结构·算法
铁匠匠匠4 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
C-SDN花园GGbond4 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
Navigator_Z6 小时前
数据结构C //线性表(链表)ADT结构及相关函数
c语言·数据结构·算法·链表
菜菜想进步7 小时前
内存管理(C++版)
c语言·开发语言·c++
知星小度S7 小时前
C语言——自定义类型
c语言·开发语言
cleveryuoyuo7 小时前
二叉树的链式结构和递归程序的递归流程图
c语言·数据结构·流程图
科研小白_d.s7 小时前
vscode配置c/c++环境
c语言·c++·vscode
暮色_年华8 小时前
嵌入式C语言自我修养:C语言的模块化的编程思想
c语言