示例:

  1. struct inflatable
  2. {
  3. char name[20];
  4. float volume;
  5. double price;
  6. }
  7. inflatable val1;
  8. inflatable val2;
  9. inflatable val3;

其中,struct 表名这是一个结构体,inflatable 是这种数据格式的名称,然后就可以像使用 int 一样创建 inflatable 类型的变量了。

C++声明变量时可以省略 struct:

  1. inflatable val2; //C++风格
  2. struct inflatable val1; //C风格

4.4.1 如何使用结构?

示例:

  1. #include <iostream>
  2. using namespace std;
  3. struct inflatable
  4. {
  5. char name[20];
  6. float volume;
  7. double price;
  8. }
  9. int main()
  10. {
  11. inflatable guest = {"aaa", 1.88, 29.99};
  12. inflatable pal = {"bbb", 3.12, 32.99};
  13. cout << guest.name << guest.volume << guest.price << endl;
  14. return 0;
  15. }

4.4.2 C++11结构初始化

可以使用 inflatable val{“ccc”, 0.12, 9.98};,如果大括号中没有任何东西,则数字初始化为0,字符串初始化为空,数组的每个字节设置为零。最后,不允许缩窄转换。

4.4.3 结构可以将 string 类作为成员吗?

可以。

4.4.4 其他结构属性

第7章讨论函数时再介绍如何传递和返回结构。另外,可以使用 = 将结构赋值给另一个同类型的结构,这样结构中的每个成员都被设置为另一个结构中相应成员的值,这种赋值称为成员赋值(memberwise assignment)。

可以同时完成定义结构和创建变量:

  1. struct perks
  2. {
  3. int keyNumber;
  4. char car[12];
  5. }val1, val2;

还可以声明没有名字的结构类型。这种只能定义结构的时候创建变量,因为后面因为没有名字而无法创建变量。例如:

  1. struct
  2. {
  3. int x;
  4. int y;
  5. }val1;

与 C 结构不同的是:C++还可以有成员函数。一般这种高级特性用于类中,而不是结构中。

4.4.5 结构中的位字段

与C一样,C++也允许指定占用特定位数的结构成员,这样就使得创建与硬件寄存器对应的数据结构变得非常方便。可以使用没有名称的字段来提供间距。每个成员都被称为位字段(bit field)。示例:

  1. struct torgle_register
  2. {
  3. unsigned int SN : 4; //为 SN 变量分配 4 bits
  4. unsigned int : 4; //4 bits 不使用
  5. bool goodIn : 1;
  6. bool goodTorgle : 1;
  7. }

位字段通常用在低级编程中。