15-用指针访问成员
14.6.2 用指针访问成员
指针 him 指向结构变量 fellow[0] ,如何通过 him 获得 fellow[0] 的成员的值?程序清单14.4中的第3行输出演示了两种方法。
第1种方法也是最常用的方法:使用 -> 运算符。该运算符由一个连接号( - )后跟一个大于号( > )组成。我们有下面的关系:
如果him == &barney,那么him->income 即是 barney.income
如果him == &fellow[0],那么him->income 即是 fellow[0].income
换句话说,指向结构的指针后面的 -> 运算符和结构变量名后面的 . 运算符工作方式相同(不能写成 him.incone ,因为 him 不是结构名)。
这里要着重理解 him 是一个指针,但是 him->income 是该指针所指向结构的一个成员。所以在该例中, him->income 是一个 float 类型的变量。
第2种方法是,以这样的顺序指定结构成员的值:如果 him == &fellow[0] ,那么 *him == fellow[0] ,因为 & 和*是一对互逆运算符。因此,可以做以下替代:
fellow[0].income == (*him).income
必须要使用圆括号,因为 . 运算符比*运算符的优先级高。
总之,如果 him 是指向 guy 类型结构 barney 的指针,下面的关系恒成立:
barney.income == (*him).income == him->income // 假设 him == &barney
接下来,我们来学习结构和函数的交互。