自定义类型:联合和枚举
简介:1联合体类型的声明;2联合体的特点;3联合体大小的计算;4枚举类型的声明;5枚举类型的优点;6枚举类型的使用 像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以是不同的类型。 但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体。 给联合体其中一个成员赋值,其他成员的值也跟着变化。 使用联合体的目的是为了节省空间。联合体成员在同一时间只能使用一个。 联合体的特点是所有成员共用同一块内存空间,这个特点用来判断大小端很合适。 枚举顾名思义就是一一列举。 把可能的取值一一列举。 比如我们现实生活中: 一周的星期一到星期日是有限的7天,可以一一列举 性别有:男、女、保密,也可以一一列举 月份有12个月,也可以一一列举 三原色,也可以列举 这些数据的表示就可以使用枚举了。 上面定义的 这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。 下面是一个赋初值的问题: 枚举默认从0开始,所以X1是0,故Y1是1,给了数字后会根据数字向后推,那么Z1是255,A1是256,所以B1是257。 我们也可以使用 枚举的优点: 有关 说明:结构体向最长的char对齐,前两个位段元素一共4+2位,不足8位,合起来占1字节,最后一个单独1字节,一共3字节。另外,#define执行的是查找替换, sizeof(struct _Record_Struct) MAX_SIZE这个语句其实是32+3,结果为9。 那是否可以拿整数给枚举变量赋值呢?在C语言中是可以的,但是在C++是不行的,C++的类型检查比 较严格。1 联合体
1.1 联合体类型的声明
#include <stdio.h>
//联合类型的声明
union Un
{
char c;
int i;
};
int main()
{
//联合变量的定义
union Un un = { 0 };
//计算连个变量的大小
printf("%zd\n", sizeof(un));
return 0;
}
1.2 联合体的大小
#include <stdio.h>
union Un1
{
char c[5];
int i;
};
union Un2
{
short c[7];
int i;
};
int main()
{
//下面输出的结果是什么?
printf("%zd\n", sizeof(union Un1));
printf("%zd\n", sizeof(union Un2));
return 0;
}1.3 联合体判断大小端
//使用联合体判断大小端
#include <stdio.h>
int cheak_sys()
{
union
{
char c;
int i;
}n;
n.i = 1;
return n.c;
}
int main()
{
if (cheak_sys())
printf("小端\n");
else
printf("大端\n");
return 0;
}2 枚举类型
2.1 枚举类型的声明
enum Color//颜色
{
RED,
GREEN,
BLUE
}enum Color就是枚举类型。{}中的内容是枚举类型的可能取值,也叫枚举常量。

2.2 枚举类型的优点
#define定义常量,为什么非要使用枚举?#define定义的标识符比较枚举有类型检查,更加严谨。#define定义的符号#define:
2.3 枚举类型的使用
enum Color//颜色
{
RED=1;
GREEN=2;
BLUE=4;
};
enum Color clr = GREEN;//使用枚举常量给枚举变量赋值