0
点赞
收藏
分享

微信扫一扫

自定义类型二:枚举,联合体

眼君 2022-02-07 阅读 105

目录

前言

一,枚举

1.1枚举的定义及初始化

1.2枚举的优点

1.3枚举的使用

二,联合体

2.1联合体基本内容

2.2联合体计算编译器大小端 


前言

我们知道,常量有很多种,比如字面常量,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 存放的第一个字节内容,因为当前编译器为小端存储,所以结果为 小端。

好的,关于自定义类型后半部分的介绍就到这里了,如有问题,还请指正呀!

                                         

举报

相关推荐

0 条评论