- 内容提要
- 前言
- 第 1 章 预备知识
- 第 2 章 开始学习 C++
- 第 3 章 处理数据
- 第 4 章 复合类型
- 第 5 章 循环和关系表达式
- 第 6 章 分支语句和逻辑运算符
- 第 7 章 函数——C++的编程模块
- 第 8 章 函数探幽
- 第 9 章 内存模型和名称空间
- 第 10 章 对象和类
- 第 11 章 使用类
- 第 12 章 类和动态内存分配
- 第 13 章 类继承
- 第 14 章 C++中的代码重用
- 第 15 章 友元、异常和其他
- 第 16 章 string 类和标准模板库
- 第 17 章 输入、输出和文件
- 第 18 章 探讨 C++新标准
- 附录 A 计数系统
- 附录 B C++保留字
- 附录 C ASCII 字符集
- 附录 D 运算符优先级
- 附录 E 其他运算符
- 附录 F 模板类 string
- 附录 G 标准模板库方法和函数
- 附录 H 精选读物和网上资源
- 附录 I 转换为 ISO 标准 C++
- 附录 J 复习题答案
4.9 类型组合
本章介绍了数组、结构和指针。可以各种方式组合它们,下面介绍其中的一些,从结构开始:
可以创建这种类型的变量:
然后使用成员运算符访问其成员:
可创建指向这种结构的指针:
将该指针设置为有效地址后,就可使用间接成员运算符来访问成员:
可创建结构数组:
然后,可以使用成员运算符访问元素的成员:
其中 trio 是一个数组,trio[0]是一个结构,而 trio[0].year 是该结构的一个成员。由于数组名是一个指针,因此也可使用间接成员运算符:
可创建指针数组:
咋一看,这有点复杂。如何使用该数组来访问数据呢?既然 arp 是一个指针数组,arp[1]就是一个指针,可将间接成员运算符应用于它,以访问成员:
可创建指向上述数组的指针:
其中 arp 是一个数组的名称,因此它是第一个元素的地址。但其第一个元素为指针,因此 ppa 是一个指针,指向一个指向 const antarctica_years_end 的指针。这种声明很容易容错。例如,您可能遗漏 const,忘记*,搞错顺序或结构类型。下面的示例演示了 C++11 版本的 auto 提供的方便。编译器知道 arp 的类型,能够正确地推断出 ppb 的类型:
在以前,编译器利用它推断的类型来指出声明错误,而现在,您可利用它的这种推断能力。
如何使用 ppa 来访问数据呢?由于 ppa 是一个指向结构指针的指针,因此*ppa 是一个结构指针,可将间接成员运算符应用于它:
由于 ppa 指向 arp 的第一个元素,因此*ppa 为第一个元素,即&s01。所以,(*ppa)->year 为 s01 的 year 成员。在第二条语句中,ppb+1 指向下一个元素 arp[1],即&s02。其中的括号必不可少,这样才能正确地结合。例如,*ppa->year 试图将运算符*应用于 ppa->year,这将导致错误,因为成员 year 不是指针。
上面所有的说法都对吗?程序清单 4.23 将这些语句放到了一个简短的程序中。
程序清单 4.23 mixtypes.cpp
该程序的输出如下:
该程序通过了编译,并向前面介绍的那样运行。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论