枚举
枚举顾名思义就是一一列举,把可能的取值列举出来。
- 枚举类型定义:
enum Day//星期
{
Mon,
Tuse,
Wed,
Thur,
Fir,
Sat,
Sun
};
enum Color//颜色
{
RED,
GREEN,
BLUE
};
以上的定义的两个enum Day,enum Color都是枚举类型。
{ }中的内容是枚举类型的肯能取值,也叫枚举常量,这些可能取值都是是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。如以下:
enum Color//颜色
{
RED=1,
GREEN=2,
BLUE=3
};
枚举的优点:
1.增加代码的可读性和可维护性。
2.和#define定义的标识符比较,枚举有类型检查,更加严谨。
3.防止命名污染(封装)。
4.便于调试。
5.使用方便,一次可以定义多个常量。枚举的使用
enum Color//颜色
{
RED=1,
GREEN=2,
BLUE=3
};
enum Color clr = GREEN;//只能用枚举常量给枚举变量赋值,才不会出现类型的差异
clr = 4;
联合(共用体 )
- 联合类型定义:
联合是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间,所以联合也叫共用体。
例:
union Un
{
char c;
int i;
};
union Un un;//联合变量的定义
printf("%d\n", sizeof(un));
//输出结果为4,由于char和int类型共用同一块空间
- 联合的特点:
1.联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。
2.当最大成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍。
例:
#include <stdio.h>
union Un1
{
char c[5];
int i;
};
union Un2
{
short c[7];
int i;
};
int main()
{
printf("%d\n", sizeof(union Un1));//8
printf("%d\n", sizeof(union Un2));//16
system("pause");
return 0;
}
- 联合体和结构体的巧妙使用:
//将long类型的IP地址,转化为点分十进制的表示形式
#include <stdio.h>
union Ip_addr
{
unsigned long addr;
struct
{
unsigned char c1;
unsigned char c2;
unsigned char c3;
unsigned char c4;
}Ip;
};
int main()
{
union Ip_addr my_Ip;
my_Ip.addr = 127555555;
printf("%d.%d.%d.%d\n", my_Ip.Ip.c1, my_Ip.Ip.c2, my_Ip.Ip.c3, my_Ip.Ip.c4);
system("pause");
return 0;
}
输出结果: