重複の可能性:
C に矢印 (->) 演算子が存在するのはなぜですか?
なぜCには両方があるのですか?および->構造体メンバーのアドレス指定用?
pを構造体へのポインタとして取り、 p.valueと同じように構造体メンバの値を取得できる、そのような変更された言語構文を持つことは可能ですか?
重複の可能性:
C に矢印 (->) 演算子が存在するのはなぜですか?
なぜCには両方があるのですか?および->構造体メンバーのアドレス指定用?
pを構造体へのポインタとして取り、 p.valueと同じように構造体メンバの値を取得できる、そのような変更された言語構文を持つことは可能ですか?
p->m
の省略形と考えることができます(*p).m
C99仕様から。
演算子の最初のオペランドは.
、修飾または非修飾の構造体または共用体型を持ち、2 番目のオペランドはその型のメンバーを指定する必要があります。
演算子の最初のオペランドは、修飾または非修飾の構造体へ->
の型ポインター、または修飾または非修飾の共用体へのポインターを持ち、2 番目のオペランドは、ポイントされる型のメンバーを指定する必要があります。
私の推測では、識別目的で、メンバー アクセスに 2 つの演算子を使用したのでしょう。つまり、ポインタ型構造体変数の場合は->
、.
通常の構造体変数の場合です。
例えば:
struct sample E, *E1;
式(&E)->MOS
はと同じでE.MOS
あり
(*E1).MOS
、と同じですE1->MOS
出来ますか?はい。構文は次のとおりです。
(*ptr).member
構造体メンバー演算子は 間接演算子.
よりも優先順位が高いため、括弧が必要です。しかし、それを数回使用した後、次の方が使いやすいことに同意するでしょう。 *
ptr->member
なぜCは両方を持っているのですか?構造体へのポインターはCで頻繁に使用されるため、構造体ポインター演算子 ->
と呼ばれる特別な演算子が作成されました。構造体へのポインタをより明確かつ便利に表現するのが仕事です。
. は構造体変数用で、 -> はポインター用です。p がポインターの場合、p->value または (*p).value を実行できます。これらは同じです。