例 2 のように構造体へのポインタが与えられた時には、どのようにしてメンバーを 指定すれば良いのであろうか。勿論、以下のようにするのは誤りである。
間違った例 ppen.hutosa = 4; |
ppen
はポインタであって、構造体そのものではないので、上のようにそのまま
選択演算子を用いる事は出来ない。選択演算子はあくまでも構造体変数に作用するもの
であるからだ。正しくは次のようにする。
正しい例 (*ppen).hutosa = 4; |
ここで *ppen
全体を括弧で囲むことを忘れてはいけない。何故ならば、
選択演算子 .
と参照演算子 *
では選択演算子の方が強いからであり、
そのために括弧がないと、*(ppen.hutosa)
と解釈されてしまうからである。
従って、確かに上の例のようにすれば正しいのだが、面倒であるし、間違う可能性も
高くなるので、構造体ポインタの指す構造体のメンバーへのアクセスには特別に
演算子 ->
が用意されている。
(*ppen).hutosa は、 ppen->hutosa と同じ。 |
従って、例 3 の関数 init()
は、例えば次のように書ける。
例 4 init( struct Pen *ppen){ ppen->color = 'b'; ppen->hutosa = 5; } |