• 作者:老汪软件
  • 发表时间:2023-12-30 11:00
  • 浏览量:

//枚举类型的声明
enum Sex
{
	MALE,
	FEMALE,
	SECRET
};
enum Color
{
	RED,
	GREEN,
	BLUE
};

#include
enum Sex
{
	MALE=4,//ok
	FEMALE=5,//ok
	SECRET=6
};
enum Sex
{
	MALE=4,//ok
	FEMALE,//ok 5
	SECRET//6
};
int main()
{
	MALE=5//err❌
	return 0;
}

枚举的定义

这样定义变量看似可以,但是不建议这样写。

//枚举类型的声明
#include
enum Sex
{
	MALE,
	FEMALE,
	SECRET
};
int main()
{
	enum Sex sex = MALE;//OK
	enum Sex sex = 2;//err❌
	//枚举类型    //整型
	printf("%d\n", sizeof(sex));//4
	return 0;
}

枚举的优点

我们抛出一个问题为什么要用枚举?我们可以使用 # 定义常量,为什么非要使用枚举?

enum Sex
{
	MALE,
	FEMALE,
	SECRET
};
//类型
#define MALE 3
#define FEMALE 4
#define SECRET 5
//替换

以上都是非常重要的原因,在平时写代码我们很少用到枚举,但是留时间写代码,总会有所感悟的

枚举的使用

enum Color//颜色
{
RED=1,
GREEN=2,
BLUE=4
};
enum Color clr = GREEN;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。

联合(共用体) 什么是联合呢?

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

union tag
{
	member - list;
};

联合类型的定义

union Un
{
	char c;
	int i;
};

联合的特点

下面代码那我们猜测一下大小是5个字节吗?

#include
union Un
{
	char c;
	int i;
};
int main()
{
	union Un un;
	printf("%d\n", sizeof(un));//?
	return 0;
}

C语言自定义类型_枚举&联合(3)

既然都这么问了,那肯定不是5个字节的大小。提醒:联合体的成员是公用一块空间。

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

#include
union Un
{
	char c;
	int i;
};
int main()
{
	union Un un;
	printf("%d\n", sizeof(un));
	printf("%p\n", &un.c);
	printf("%p\n", &un.i);
	return 0;
}

C语言自定义类型_枚举&联合(3)

C语言自定义类型_枚举&联合(3)

特点:公用同一块空间。所以改变c的同时会改变i,同一时间只能访问使用一个数据。

联合使用

面试题:判断当前计算机的大小端存储

忘记了大小端的戳一戳:C语言之整数_数据存储篇(1)-CSDN博客

#include
int check(int i)
{
	int* p = &i;
	return  *(char*)p;
}
int main()
{
	int i = 1;
	int ret=check(i);
	if (ret == 1)
	{
		printf("小端存储");
	}
	else
	{
		printf("大端存储\n");
	}
	return 0;
}

用我们的联合也可以轻松搞定!!

#include
int check(int i)
{
	union Un//可以用匿名联合
	{
		char c;
		int i;
	};
	union Un un;
	un.i = 1;
	return un.c;
}
int main()
{
	int i = 0;
	int ret=check(i);
	if (ret == 1)
	{
		printf("小端存储");
	}
	else
	{
		printf("大端存储\n");
	}
	return 0;
}

联合大小的计算

联合体的大小是最大成员的大小对吗?当然是错误的。

#include
union Un
{
	char c[5];
	int i;
};
int main()
{
	union Un un;
	printf("%d\n", sizeof(un));
	return 0;
}

C语言自定义类型_枚举&联合(3)

这个和我们上篇博文讲的对齐有关,大家自己算一算。

union Un1
{
char c[5];
int i;
};
union Un2
{
short c[7];
int i;
};
//下面输出的结果是什么?
printf("%d\n", sizeof(union Un1));//8
printf("%d\n", sizeof(union Un2));//16

联合的应用

【后面博客我们会讲通讯录的程序?】

✔✔✔✔✔最后,感谢大家的阅读,若有错误和不足,欢迎指正!

下篇博文我们学习动态内存管理。??

代码------→【gitee:唐棣棣 (TSQXG) - 】

联系------→【邮箱:】