• ベストアンサー

*s.pstrと*(s.pstr)は同じですか?

構造体メンバのポインタです。 1文字目を参照する struct tag_s{  char *pstr; }s; の場合、*s.pstrと*(s.pstr)は同じですか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#5537
noname#5537
回答No.3

> その表の結合性というのはどういう意味ですか? 「結合規則」とも呼ばれます。 同じ優先順位の演算子を並べたときにどのように解釈されるかです。 例1)  x.y++ ドット(.)演算子と後置インクリメント(++)演算子は同じ優先順位ですが, 結合規則は「左から右」なので,  (x.y)++ と解釈されます。 例2)  a = b = 0 代入(=)演算子の結合規則は「右から左」なので,  a = (b = 0) と解釈されます。

basukento
質問者

お礼

一瞬、それでは矛盾があると思いましたが、その表の優先順位が同じものなら 結合性も同じだったので納得できました。 ありがとうございました。

その他の回答 (2)

noname#5537
noname#5537
回答No.2

参考 URL に演算子の優先順位が載っているので参考にしてください。 ちなみに,s.pstr[0] でも同じです。 「1文字目を参照する 」ならこの方が分かりやすいかも。

参考URL:
http://www.bohyoh.com/CandCPP/C/operator.html
basukento
質問者

補足

ありがとうございます。 その表の結合性というのはどういう意味ですか? x++なら左 ++xなら右 と書いてありますが、x++ならxを参照した後に++でインクリメントするから 左のxが右の++より先だから、 x++なら右 なのではないかと思いました。

  • nitscape
  • ベストアンサー率30% (275/909)
回答No.1

同じだと思います。 プログラムを作るときは、カッコを付けた表現をした方が間違えが少なくていいと思います。例えば同じように struct tag_s* ps; ps = &s; のときは*(p->pstr)した方が分かりやすいですよね。

basukento
質問者

お礼

ありがとうございます。 ポインタでアロー演算子の場合も省略可能ということですね。

関連するQ&A

専門家に質問してみよう