Share via


構造体と共用体のメンバー

"メンバー選択式" は構造体と共用体のメンバーを参照します。 このような式には、選択したメンバーの値と型が割り当てられます。

postfix-expression . identifier
postfix-expression -> identifier

ここでは、メンバー選択式の 2 つの形式について説明します。

  1. 最初の形式で、postfix-expression は型 struct または union の値を表し、identifier はその構造体または共用体のメンバーを指定します。 操作の値は identifier の値となります。postfix-expression が左辺値の場合は左辺値となります。 詳しくは、「左辺値と右辺値の式」を参照してください。

  2. 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;

このステートメントは、構造体の配列から個々の構造体メンバーを選択する方法を示しています。

関連項目

メンバー アクセス演算子: . と ->