结构体
本篇内容包括结构体,共用体和枚举。
一.结构体
1.声明
1 | struct inflatable |
如上所示,声明了一个结构体。结构定义的是新类型(inflatable)的特征。定义了结构后就可以声明这种类型的变量。
1 | struct inflatable hat; |
可以省略struct
,这样就强调inflatable
是一种新的类型。
对于结构的声明,应注意位置,关键是在使用的地方的前面,但是,最好在main
函数的前面。C++不提倡使用外部变量,但是提倡外部结构声明。
1 | inflatable guest = |
关键在于用逗号分隔。
在C++11中是与此类似的,等号是可选的,如果大括号内是空的,那么值将是0,字符串每字节也是0。同时,不予许窄缩。
这种声明方式也是可以的,但是显然不好。
1 | struct perks |
还可以声明没有名称的结构类型,方法是省略名称,同时定义一种结构类型和一个这种类型的变量:
1 | struct // no tag |
照常可以访问成员,但是在后面就不可以在创建该类型的结构。
2.结构数组
结构中可以包含的东西有很多,包括数组。也可以创建一个由结构组成的数组。
1 | inflatable gifts[100]; // array of 100 inflatable structures |
二.共用体
共用体(union)是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。也就是说,结构可以同时存储int、long和 double,共用体只能存储int、long或double。共用体的句法与结构相似,但含义不同。
1 | union one4all |
可以使用one4all变量来存储int、long和 double,条件是在不同的时间进行:
1 | one4all pail; |
由于共 用体每次只能存储一个值,因此它必须有足够的空间来存储最大的成员,所以,共用体的长度为其最大成员的长度。
共用体也是可以匿名。
三.枚举
C++的enum工具提供了另一种创建符号常量的方式,这种方式可以代替const。它还允许定义新类型,但必须按严格的限制进行。使用enum的句法与使用结构相似。例如,请看下面的语句:
1 | enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet}; |
让 spectrum成为新类型的名称;spectrum被称为枚举(enumeration),就像struct变量被称为结构一样。
将 red、orange、yellow等作为符号常量,它们对应整数值0~7。这些常量叫作枚举量(enumerator)。
在默认情况下,将整数值赋给枚举量,第一个枚举量的值为0 ,第二个枚举量的值为1,依次类推。
可以用枚举名来声明这种类型的变量。
枚举变量具有一些特殊的属性,下面来看一看。
在不进行强制类型转换的情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量,如下所示:
1 | band = blue;// valid, blue is an enumerator |