構造体と共用体のメンバー
"メンバー選択式" は構造体と共用体のメンバーを参照します。 このような式には、選択したメンバーの値と型が割り当てられます。
postfix-expression
.
identifier
postfix-expression
->
identifier
ここでは、メンバー選択式の 2 つの形式について説明します。
最初の形式で、
postfix-expression
は型struct
またはunion
の値を表し、identifier
はその構造体または共用体のメンバーを指定します。 操作の値はidentifier
の値となります。postfix-expression
が左辺値の場合は左辺値となります。 詳しくは、「左辺値と右辺値の式」を参照してください。2 番目の形式では、
postfix-expression
は構造体または共用体へのポインターを表し、identifier
はその構造体または共用体のメンバーを指定します。 値はidentifier
の値であり、左辺値です。
どちらの形式のメンバー選択式でも同じ結果が得られます。
実のところ、メンバー選択演算子 (->
) を使った式は、ピリオド (.
) を使った式の左側部分がポインター値に適用される間接演算子 (*
) で構成されている場合の短縮形です。 次に例を示します。
expression->identifier
上記の式は、次の式と同じです。
(*expression).identifier
expression
はポインター値になります。
使用例
次に、この構造体宣言の例を示します。 これらの例で使用されている間接演算子 (*
) については、「間接演算子とアドレス演算子」を参照してください。
struct pair
{
int a;
int b;
struct pair *sp;
} item, list[10];
item
構造体のメンバー選択式は次のようになります。
item.sp = &item;
この例では、item
構造体のアドレスが、構造体の sp
メンバーに代入されます。 つまり、item
にはそれ自体へのポインターが格納されます。
(item.sp)->a = 24;
この例では、ポインター式 item.sp
とメンバー選択演算子 (->
) を使用して、メンバー a
に値を代入しています。
list[8].b = 12;
このステートメントは、構造体の配列から個々の構造体メンバーを選択する方法を示しています。