自定义类型
枚举(enum)
枚举默认为int类型
用法格式:
enum 枚举名
{
枚举元素1, //注意元素后是 " ,"
枚举元素2,
枚举元素3,
…
}
枚举 就是将把可能的情况都一一列举出来
例:
enum Color
{
//枚举的可能取值
//每一个可能的取值是常量
//枚举常量
RED, //0
GREEN, //1
BLUE //2
//我们可以在枚举最开始的时候给值
//例如
//RED = 5,//后面默认增加 1
//GREEN,
//BLUE
//RED = 6,
//GREEN = 7,
//BLUE = 10
};
int main()
{
//当我希望颜色为红色时
enum Color color = RED;
//err
RED = 2; //报错 左操作数必须可修改
//枚举默认 0-N
printf("%d\n",RED); //0
printf("%d\n",GREEN); //1
printf("%d\n",BLUE); //2
return 0;
}
联合(Union)[共用体]
用法格式:
union 联合名
{
成员表
};
注:①联合体在一个内存空间中储存不同的数据类型
②union内变量的大小是最大成员的大小
③当最大成员不是最大对齐数的整数倍的时候,
就要对齐到最大对齐数的整数倍
例:
union Un
{
char c; //占用 1 字节
int i; //占用 4 字节
double d; //占用 8 字节
//由于共用一个内存空间 则共占用8字节
}
int main()
{
union Un un;
printf("%d\n",sizeof(un)); //8字节
printf("%d\n",sizeof(union Un)); //8字节
//以下首地址都相同
printf("%p\n",&un);
printf("%p\n",&(un.c));
printf("%p\n",&(un.i));
printf("%p\n",&(un.d));
}
图解:
由于union共用一个内存空间,所以使用时只能取出其中一个数据类型,修改后,其他数据类型也会被修改