第20回
いろいろな演算子~演算子の優先順位

構造体のメンバ参照~「.」と「->」

構造体は、1つの定義型の中に複数の異なる型の変数が包括されています。それらメンバの値を個別に利用するには、メンバ参照演算子を用います。Cでは構造体型の変数を直接扱う他、ポインタを介しても扱えます。そのため、直接メンバ参照と間接メンバ参照の2種類の演算子が用意されています。

直接メンバ参照演算子~「.」

構造体型変数の各メンバの値を扱うには、直接メンバ参照演算子「.」を使って以下のように記述します。
<構造体型変数名>.<メンバ名>
typedef struct {
  char name[256];
  unsigned short int value;
} _item;
_item tool;
として、構造体_item型の変数toolを宣言した場合、そのメンバnameは"tool.name"という形で参照できます。メンバのnameはchar型の配列なので、通常はchar型のポインタを介して以下のような形で扱うことになるでしょう。
char *p;
p = tool.name;
これで、変数toolのメンバnameをポインタ*pで扱えるようになります。

間接メンバ参照演算子~「->」

構造体型変数をポインタで扱う場合、その中のメンバを示すには間接メンバ参照演算子「->」を使って以下のように記述します。
<構造体型ポインタ変数名>-><メンバ名>
_item tool, *ip;
ip = tool;
このようにすると、ipは_item型の変数toolのアドレスを保持するポインタとして扱えます。ポインタを介して構造体のメンバを参照するには以下のようにします。
char *p;
p = ip->name;
構造体の扱いは意外と難しいため、ここでは概略だけを紹介しておきます。メンバの参照方法など、今の段階ではあまり深く考えなくて構いません。