プロが教えるわが家の防犯対策術!

構造体メンバのポインタです。
1文字目を参照する

struct tag_s{
 char *pstr;
}s;

の場合、*s.pstrと*(s.pstr)は同じですか?

A 回答 (3件)

> その表の結合性というのはどういう意味ですか?



「結合規則」とも呼ばれます。
同じ優先順位の演算子を並べたときにどのように解釈されるかです。

例1)
 x.y++
ドット(.)演算子と後置インクリメント(++)演算子は同じ優先順位ですが,
結合規則は「左から右」なので,
 (x.y)++
と解釈されます。

例2)
 a = b = 0
代入(=)演算子の結合規則は「右から左」なので,
 a = (b = 0)
と解釈されます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/12/02 23:52

参考 URL に演算子の優先順位が載っているので参考にしてください。



ちなみに,s.pstr[0] でも同じです。
「1文字目を参照する 」ならこの方が分かりやすいかも。

参考URL:http://www.bohyoh.com/CandCPP/C/operator.html

この回答への補足

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

補足日時:2003/12/02 22:24
    • good
    • 0

同じだと思います。



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

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

お礼日時:2003/12/02 21:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!