同一个结构可存储多种类型的数据。
struct inflatable //关键字struct表明这些代码定义 的是一个结构的布局。标识符inflatable是这种数据格式的名称,有3个成员
{ //列表中的每一项都被称为结构成员
char name [20]; //每个列表都是一个声明语句 存储字符串的char数组
float volum;
double price;
}
结构定义指出了新类型的(inflatable)的特征
定义结构后,可以创建这种类型的变量
inflatable hat;
inflatable mainframe;
hat的类型是inflatable,因此可以使用成员运算符(.)来访问各个成员,由于price成员被声明为double类型,hat.price相当于是double类型的变量。
结构声明的位置很重要,有两种选择,可以将声明放在main()函数中,紧跟在开始括号的后面,或者将声明放到main()函数的前面。位于函数外面的声明被称为外部声明,可被其后面的任何函数使用。内部声明只能被该声明所属的函数使用。
C++11结构初始化
1、与数组一样,C++11也支持将列表初始化用于结构,且“=”是可选的
inflatable duck {"Daphne", 0.12, 9.98};
duck.name是一个字符数组,可以用下标来访问其中的字符,如
duck.name[0]是字符D,但是duck[0]没有意义,因为duck是一个结构,不是数组。
2、若大括号内未包含任何东西,各个成员都将被设置为0。
inflatable mayor {};
3、最后,不允许缩窄转换。
可以将string类作为成员,将成员name指定为string对象而不是字符数组。前提是要让结构定义能够访问名称空间std,为此,可以将编译指令using移到结构定义之前,也可以将name声明为std::string。
其他结构属性
可以将结构作为参数传递给函数
可以让函数返回一个结构
可以使用赋值运算符“=”将结构赋给另一个同类型的结构,这样结构中每个成员都将被设置为另一个结构中相应成员的值,即使成员是数组。这种赋值被称为成员赋值。
结构数组
inflatable结构包含一个数组,也可以创建元素为结构的数组。
inflatable gifts[100];
gifts是一个inflatable数组,其中每个元素gifts[0]等都是inflatable对象。gifts本身是数组,而不是结构。数组中每个元素都是结构。
inflatable guests [2]=
{
{"Bambi", 0.5, 21.99},
{"Godzilla", 2000, 565.99},
};
guests是一个inflatable数组,因此guests[0]的类型为inflatable,可以使用它和句点运算符来访问相应inflatable结构成员。
- 共用体
共用体union是一种数据结构,它能够存储不同的数据类型,但只能同时存储其中一种类型。结构可以同时存储int,long,double,共用体只能存储int,long或double。
union one4all
{
int int_val;
long long_val;
double double_val;
};
可以用one4all变量存储int,long或double,条件是再不同时间进行
one4all pail;
pail.int_val=15; //store an int
cout << pail.int_val;
pail.double_val = 1.38; // store a double, int value is lost
cout << pail.double_val;
pail有时是int,有时又可以是double,由于共用体每次只能存储一个值,共用体的长度为其最大成员的长度。
共用体常用于节省内存,常用于操作系统数据结构或硬件数据结构。