我们也可以使用#define定义常量,为什么非要使用枚举呢,因为枚举有以下几个优点:
1.增加代码的可读性和可维护性
2.和#define定义的标识符比较枚举有类型检查,更加严谨
3.防止了命名污染(封装)
4.便于调试
5.使用方便,一次可以定义多个常量
枚举的使用
枚举的使用与struct有些相似都需要大括号后面加个分号(;)
#include<stdio.h>
#include<string.h>
enum color
{
red,//可以给枚举常量赋一个初始值 比如red=2
green,
blue
};
int main()
{
printf("%d %d %d",red,green,blue);//打印出来的值默认为0 1 2
enum color s=green;
printf("%d",sizeof(s));//求枚举的大小
return 0;
}
#define的使用
#include<stdio.h>
#define red 0
#define green 1
#define blue 2
int main()
{
printf("%d %d %d",red,green,blue);
return 0;
}
总结:显而易见在需要很多个对象时,枚举方便很多。
联合体(共同体)
联合是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员共有同一块空间。
其特点是:联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。
#include<stdio.h>
#include<string.h>
union h
{
char c;
int i;
};
int main()
{
union h a;
printf("%d\n",sizeof(a));//计算联合变量的大小
printf("%p\n",&a);//这三行代码打印出来的地址的都是一样的
printf("%p\n",&(a.c));
printf("%p\n",&(a.i));
return 0;
}
联合体的大小至少是最大成员的大小;当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对其数的整数倍。