- ベストアンサー
ポインタに関する質問
int v; int *p=&v ポインタ変数pに変数vのアドレスを代入して、次からは、pからvの値を操作したいのですが、「*p++」としたところ、変数vの値がインクリメントされずに、pに格納されるアドレスその物がインクリメントされてしまいました 「*p+=1」とする事でvの値をインクリメントすることができましたが、 「*p+=1」このように書かれる処理は望ましい物ではないのでしょうか
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
目的がはっきりしていれば決して「望ましくない書き方」ではないですよ。 演算子の優先順位に気をつけていればご質問にあるような混乱も避けられると思います。 「*p++」では「*」よりも「++」のほうが優先順位が高いため、結果として「*(p++)」という 計算になります。 「*p+=1」は「+=」よりも「*」(間接参照)のほうが優先順位が高いため「(*p)+=1」となり 「(*p)++」と同等で、結果として v をインクリメントできます。 演算子の優先順位は僕自身もすべて憶えているわけではないのでの表を見なければ 自信がもてないことも多いですが、不安なときには自分の意図する計算順位になるように 上記のようにカッコを付けて順位を明示するのもひとつの手です。 ↓C言語演算子の優先順位についてはこのサイトがわかりやすいと思います。 http://www.bohyoh.com/CandCPP/C/operator.html
その他の回答 (3)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス >「*p+=1」とする事でvの値をインクリメントすることができましたが、 >「*p+=1」このように書かれる処理は望ましい物ではないのでしょうか ↑ 『(*p)++;』とすれば v をインクリメントできますけど。 演算子の優先順序や結合法則によってカッコをつけるか、 『*p += 1;』とするしかないです。 >ポインタ変数pに変数vのアドレスを代入して、次からは、pからvの値を操作したいのですが、 >「*p++」としたところ、変数vの値がインクリメントされずに、 >pに格納されるアドレスその物がインクリメントされてしまいました ↑ これは正しい動作ですよ。 この質問はポインタの何を知りたいのですか? ・以上。
- mizz
- ベストアンサー率23% (6/26)
(*p)++; としたら変数vがインクリメントされると思いますが・・・ ちがってたらごめんなさい。
*(p++)と解釈されたのでしょう。ポインタはバグのもとなのでJAVAを使った方がいいと思います。