【C语言】自定义类型—枚举,联合

本文介绍了C语言中的枚举和联合概念,包括枚举的定义、优点(如可读性、类型检查和防止命名污染)、使用方法以及联合的定义、特点(共享内存空间)和大小计算。作者强调了自定义类型(结构体、枚举和联合)在编程中的灵活性。
摘要由CSDN通过智能技术生成

目录

一 枚举

1 枚举概念

2 枚举类型的定义

3 枚举的优点 

4 枚举的使用

二 联合(共用体)

1 联合类型定义

2 联合的特点

3 联合大小的计算


一 枚举

1 枚举概念

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

把可能的取值一一列举。

比如我们现实生活中:

一周的星期一到星期日是有限的7天,可以一一列举。

性别有:男、女、保密,也可以一一列举。

月份有12个月,也可以一一列举

这里就可以使用枚举了。

2 枚举类型的定义

enum Day//星期
{
       Mon,
       Tues,
       Wed,
       Thur,
       Fri,
       Sat,
       Sun
};
enum Sex//性别
{
       MALE,
       FEMALE,
       SECRET
};
enum Color//颜色
{
       RED,
       GREEN,
       BLUE
};
 

 以上定义的 enum Day , enum Sex , enum Color 都是枚举类型。

{ }中的内容是枚举类型的可能取 值,也叫 枚举常量 。

这些可能取值都是有值的,默认从0开始,一次递增1,

当然在定义的时候也可以赋初值。 例如

enum Color//颜色
{
       RED = 1,
       GREEN = 2,
       BLUE = 4
};
 

3 枚举的优点 

我们可以使用 #define 定义常量,为什么非要使用枚举?

枚举的优点:

1. 增加代码的可读性和可维护性

2. 和#define定义的标识符比较枚举有类型检查,更加严谨。

3. 防止了命名污染(封装)

4. 便于调试

5. 使用方便,一次可以定义多个常量

4 枚举的使用

#include<stdio.h>

enum Color//颜色
{
       RED,
       GREEN,
       BLUE
};

int main()
{
       enum Color clr = GREEN;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异
       int a = RED;
       //clr = 5;
       printf("%d\n", clr);
       printf("%d\n", a);
}

二 联合(共用体)

1 联合类型定义

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

//联合类型说明
union Un
{
       char c;
       int i;
};
int main()
{
       union Un un;//联合变量的定义
       printf("%d\n", sizeof(un));//计算联合大小
}

 我们可以发现它们是共用同一块空间的

2 联合的特点

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

//联合类型的声明
union Un
{
       char c;
       int i;
};
int main()
{
       printf("%d\n", sizeof(union Un));
       union Un un = { 0 };
       un.i = 0x11223344;
       un.c = 0x55;
       
       printf("%p\n", &un);
       printf("%p\n", &(un.i));
       printf("%p\n", &(un.c));
       return 0;
}

 

 如何判断大小端?

 那我们下学习了联合 可以利用联合体的方法

#include<stdio.h>

int check_sys()
{
	union//匿名
	{
		int i;
		char c;
	}un = { .i = 1 };//初始化
	return un.c;
}

int main()
{
	int ret = check_sys();


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

	return 0;
}

 

3 联合大小的计算

联合的大小至少是最大成员的大小。

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

比如:

union Un1
{
       char c[5];//5 1 8 1
       int i;//4 8 4
};

union Un2
{
       short c[7];//14 2 8 2
       int i;//4 4 8 4
};

int main()
{
       printf("%d\n", sizeof(union Un1));//5+3 = 8
       printf("%d\n", sizeof(union Un2));//16

       return 0;
}
 

 

 

 

自定义类型包括结构体 枚举 和联合 这三者在很多方面有相同之处  希望自己以后能灵活利用他们 继续加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值