今天在调试网络问题时,突然想到了动态数据包,要用到enum来区分不同的数据包。此时想到一个问题"ENUM在结构体中占用空间吗"
于是我写了段代码测试了一下
struct Msg
{
enum { TAG_SIZE = 3};
enum { TAG_ID = 5, TAG_ID_1, TAG_ID_2, TAG_ID_3};
int a;
int b;
};
void main()
{
cout<<sizeof(Msg)<<endl;
}
输出结构:
8
Press any key to continue
很显然不占空间。那么为什么呢?于是我搜索了下。下面的解释很有道理。基础的巩固不是靠死记硬背能搞定的,想当年我c,c++考试门门90多分,真正在实战中时对一些基础感念总是模棱两可。
ENUM是定义枚举型变量
在实际问题中, 有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月, 一个班每周有六门课程等等。
如果把这些量说明为整型, 字符型或其它类型显然是不妥当的。 为此,C语言提供了一种称为“枚举”的类型。
在“枚举”类型的定义中列举出所有可能的取值, 被说明为该“枚举”类型的变量取值不能超过定义的范围。
应该说明的是, 枚举类型是一种基本数据类型,而不是一种构造类型, 因为它不能再分解为任何基本类型。
struct是结构体
在实际问题中,一组数据往往具有不同的数据类型。例如, 在学生登记表中,姓名应为字符型;学号可为整型或字符型; 年龄应为整型;
性别应为字符型;成绩可为整型或实型。 显然不能用一个数组来存放这一组数据。 因为数组中各元素的类型和长度都必须一致,
以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构”。 它相当于其它高级语言中的记录。
“结构”是一种构造类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。
结构既是一种“构造”而成的数据类型, 那么在说明和使用之前必须先定义它,也就是构造它。
如同在说明和调用函数之前要先定义函数一样。