0

重複の可能性:
C に矢印 (->) 演算子が存在するのはなぜですか?

なぜCには両方があるのですか?および->構造体メンバーのアドレス指定用?

pを構造体へのポインタとして取り、 p.valueと同じように構造体メンバの値を取得できる、そのような変更された言語構文を持つことは可能ですか?

4

4 に答える 4

3

p->mの省略形と考えることができます(*p).m

于 2012-12-06T04:57:09.103 に答える
3

C99仕様から。

演算子の最初のオペランドは.、修飾または非修飾の構造体または共用体型を持ち、2 番目のオペランドはその型のメンバーを指定する必要があります。

演算子の最初のオペランドは、修飾または非修飾の構造体へ->の型ポインター、または修飾または非修飾の共用体へのポインターを持ち、2 番目のオペランドは、ポイントされる型のメンバーを指定する必要があります。

私の推測では、識別目的で、メンバー アクセスに 2 つの演算子を使用したのでしょう。つまり、ポインタ型構造体変数の場合は->.通常の構造体変数の場合です。

例えば:

struct sample E, *E1;

(&E)->MOSはと同じでE.MOSあり
(*E1).MOS、と同じですE1->MOS

于 2012-12-06T04:53:14.007 に答える
2

出来ますか?はい。構文は次のとおりです。

(*ptr).member

構造体メンバー演算子は 間接演算子.よりも優先順位が高いため、括弧が必要です。しかし、それを数回使用した後、次の方が使いやすいことに同意するでしょう。 *

ptr->member

なぜCは両方を持っているのですか?構造体へのポインターはCで頻繁に使用されるため、構造体ポインター演算子 ->と呼ばれる特別な演算子が作成されました。構造体へのポインタをより明確かつ便利に表現するのが仕事です。

于 2012-12-06T05:06:01.897 に答える
0

. は構造体変数用で、 -> はポインター用です。p がポインターの場合、p->value または (*p).value を実行できます。これらは同じです。

于 2012-12-06T04:48:15.453 に答える