11.自定义类型:联合与枚举

本篇博客探讨C中除了结构体以外的两种自定义类型:联合和枚举

一、联合体(也称共用体)

1.联合体类型的声明

#include <stdio.h> 
//联合类型的声明 
union Un 
{ 
	char c; 
	int i; 
}; 
int main() 
{ 
	//联合变量的定义 
	union Un un = {0}; 
	//计算联合体变量的⼤⼩ 
	printf("%d\n", sizeof(un));  //4
	return 0; 
}

2.联合体的特点:联合的成员共用同一块内存空间,一个联合变量的大小至少是最大成员的大小

例:使用联合体判断当前机器是大端还是小端
int check_sys() 
{ 
	union 
	{ 
		int i; 
		char c; 
	}un; 
	un.i = 1; 
	return un.c;//返回1是⼩端,返回0是⼤端 
}

这个联合体的大小是4个字节(因为至少要装下一个int,将i的值赋为1,再用c去访问第一个字节,拿到1就是小段存放,拿到0就是大端存放,很好地体现了联合的成员共用同一块内存空间的特点)
3.相同成员的结构体和联合体对比

struct S
{
	char c;
	int i;
}

union un
{
	char c;
	int i;
}

图片解析

4.联合体大小的计算

(1)联合的大小至少是最大成员的大小
(2)当最大成员大小!=最大对齐数的整数倍,就要对齐到最大对齐数的整数倍

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

二、枚举

1.枚举类型的声明

enum Color//颜⾊ 
{ 
	RED, //内存中值为0
	GREEN, //内存中值为1
	BLUE //内存中值为2
}; 

**

2.枚举的优点

**
(1)增加代码可读性(每个数值有其对应名字)和可维护性
(2)和#define定义的标识符比较,枚举有类型检查,更加严谨
(3)便于调试(预处理阶段会删除#define定义的符号)
(4)使用方便,一次可以定义多个常量
(5)枚举常量遵循作用域规则,枚举声明在函数内,只能在函数内使用

3.枚举类型的使用(计算器改良版)

enum Option
{
	EXIT,//0
	ADD,//1,表示加法
	SUB,//2,表示减法
	MUL,//3,表示乘法
	DIV//4,表示除法
};


int main()
{
	int input = 0;
	printf("请选择:>");
	scanf("%d", &input);
	switch (input)
	{
	case ADD:
		//...
		break;
	case SUB:
		//...
		break;
	case MUL :
		//...
		break;
	case DIV:
		//...
		break;
	case EXIT:
		//...
		break;
	default:
		//...
		break;
	}
	return 0;
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值