目录
前言
我们知道,常量有很多种,比如字面常量,define定义标识符常量,const修饰的常变量,以及今天小编为大家带来的枚举常量。对于联合体,本文也将为大家一一解读。
一,枚举
什么是枚举:
枚举一一列举,比如将某一些相似的内容给放在一起,然后定义一个类型,这就是枚举。枚举关键字为 enum 。
1.1枚举的定义及初始化
如上图所示,enum s 表示该枚举的类型,枚举大括号中的内容称为枚举常量,它们都是有默认值的,默认从 0 开始,然后依次递增。当然也可以设置默认值,修改为需要的值,后面依次递增。
1.2枚举的优点
我们知道,有好几种常量的表示形式,那么有时候为什么我们不选择其他的几种,而要选择枚举这一类型呢?理由如下:相对于define定义的标识符常量来说:
那么我们将上面几个点稍加解释。
1.3枚举的使用
对于枚举的使用,要求还是挺严格的,因为枚举常量只能给枚举常量赋值,比如下图所示代码:如果将 4 赋值给 g ,将被认为是错的,因为 g 只能是枚举常量赋值。
除此之外呢,对于枚举的使用当然不仅仅只有这一点,枚举还有很多的用处,但是这个用法是容易出错的。所以我们特地提出来。
二,联合体
2.1联合体基本内容
联合体也叫共用体,这种类型定义的变量也包含一系列成员,只不过该类型的成员共用同一块空间。所以称其为联合体。因为大多数类容类似于前面几个自定义类型,所以不过多介绍。
因为联合体所有成员共用同一块空间,所以联合体有以下两个特点:
2.2联合体计算编译器大小端
当我们知道结构体这些特点之后,这里我们为大家带来一个用联合体判断当前编译器大小端的问题:
代码如下:
union un//联合体类型
{
int i;//成员
char j;
}u;//联合体变量
#include<stdio.h>
int main()
{
u.i = 1;
char* p = &(u.j);
if (*p == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
这里我们用了联合体设置了两个成员,根据联合体的特点,我们知道,当在主函数里面,将联合体成员 i 的值设置为 1 的时候,由于该成员是整型,所以在内存中存放的时候,是四个字节存放的。
而另一个成员char类型的 j 在内存中是一个字节存放的,也就是 j 指向的那块空间的内容是 i 在内存中存放的第一个字节的内容。
但是,因为内存存放有大小端之分,所以效果如下图所示:
根据联合体所有成员指向同一块空间:因为 j 指向的是 i 存放的第一个字节内容,因为当前编译器为小端存储,所以结果为 小端。
好的,关于自定义类型后半部分的介绍就到这里了,如有问题,还请指正呀!