C语言enum枚举的用法(附带实例)
在 C语言中,枚举(enumeration)是一种用户自定义的数据类型,允许你为一组有名字的整数常量定义符号名。枚举也是一种方便且易于阅读的方法,用于表示一组相关的整数值,例如表示状态、错误代码等。
我们可以用有意义的英文单词来替代数字,这些英文单词可以自由命名,只要我们能够理解它们对应的类型即可。例如,我们可以将 1 表示的整型替换为 eInteger,将 2 表示的浮点数替换为 eFloat,将 3 表示的字符串替换为 eString。
枚举的定义使用关键字 enum,后跟枚举类型的名称以及由花括号括起来的枚举值列表,最后以分号结束。例如:
为什么说枚举是一种特殊的整型呢?让我们用输出整型的方式来输出这几个枚举类型,具体代码如下:
我们如果希望从 1 开始编号,则可以在 eInteger 后添加 =1,例如:
更特殊的是,你可以为枚举中的每个成员指定一个值,例如:
同时,我们在上面的实例程序中使用了类型定义,将枚举类型定义为 msgType。这样,在后续代码中,我们可以直接使用 msgType 来代表消息类型,这增加了代码的可读性。
我们可以用有意义的英文单词来替代数字,这些英文单词可以自由命名,只要我们能够理解它们对应的类型即可。例如,我们可以将 1 表示的整型替换为 eInteger,将 2 表示的浮点数替换为 eFloat,将 3 表示的字符串替换为 eString。
枚举的定义使用关键字 enum,后跟枚举类型的名称以及由花括号括起来的枚举值列表,最后以分号结束。例如:
enum msgType{
eInteger,
eFloat,
eString
};
为什么说枚举是一种特殊的整型呢?让我们用输出整型的方式来输出这几个枚举类型,具体代码如下:
#include <stdio.h>
enum msgType {
eInteger,
eFloat,
eString
};
int main()
{
printf("eInteger %d\n", eInteger);
printf("eFloat %d\n", eFloat);
printf("eString %d\n", eString);
return 0;
}
运行结果为:
eInteger 0
eFloat 1
eString 2
我们如果希望从 1 开始编号,则可以在 eInteger 后添加 =1,例如:
enum msgType{
eInteger = 1, // 让枚举从1开始
eFloat,
eString
};
这样枚举就能够从 1 开始了,运行结果为:
eInteger 1
eFloat 2
eString 3
更特殊的是,你可以为枚举中的每个成员指定一个值,例如:
enum msgType{
eInteger = 1,
eFloat = 3,
eString = 5
};
现在,我们可以使用枚举替代数字,对前面的信息类型判别的程序进行修改,完整代码如下:
#include <stdio.h>
enum msgType {
eInteger,
eFloat,
eString
};
struct message {
enum msgType type;
union {
int n;
float f;
char* str;
};
};
void printMsg(struct message msg)
{
switch (msg.type)
{
case eInteger:
printf("%d\n", msg.n);
break;
case eFloat:
printf("%f\n", msg.f);
break;
case eString:
printf("%s\n", msg.str);
break;
}
}
int main()
{
struct message msg[3];
// 第一条信息为整型,type 为 eInteger
msg[0].type = eInteger;
msg[0].n = 123;
// 第二条信息为浮点型,type 为 eFloat
msg[1].type = eFloat;
msg[1].f = 3.14159;
// 第三条信息为字符串,type 为 eString
msg[2].type = eString;
msg[2].str = "HelloWorld";
for (int i = 0; i < 3; i++)
{
printMsg(msg[i]);
}
return 0;
}
运行结果为:
123
3.141590
HelloWorld
同时,我们在上面的实例程序中使用了类型定义,将枚举类型定义为 msgType。这样,在后续代码中,我们可以直接使用 msgType 来代表消息类型,这增加了代码的可读性。
ICP备案:
公安联网备案: