分享方式:


結構和等位成員

「成員選取運算式」(Member-selection Expression) 會參考結構和等位的成員。 這類運算式具有所選取成員的值和類型。

postfix-expression . identifier
postfix-expression -> identifier

這個清單將描述兩種形式的成員選取運算式:

  1. 在第一種形式中,postfix-expression 代表 structunion 類型的值,而 identifier 會為所指定結構或等位的成員命名。 運算的值會是 identifier 的值,而且如果 postfix-expression 為 l 值,運算的值也會是 l 值。 如需詳細資訊,請參閱 L 值和 R 值運算式

  2. 在第二種形式中,postfix-expression 代表結構或等位的指標,而 identifier 會為所指定結構或等位的成員命名。 值會是 identifier 的值,而且是 l 值。

這兩種形式的成員選取運算式會產生類似的效果。

實際上,如果句號前的運算式是由套用至指標值的間接取值運算子 (*) 所組成,則包含成員選取運算子 (->) 的運算式會是使用句號 (.) 之運算式的簡短版。 因此,

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;

這個陳述式將說明如何從結構陣列選取個別結構成員。

另請參閱

成員存取運算子:。 和 ->