例 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;
}
|