重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

ポインタ変数 xがあるとして、

*x++は、私の環境では、*(x+1)となりますが、
これは、どの処理系でも同じでしょうか?
例えば、*x=*x+1と解釈されるといったことはあるのでしょうか?
また、++*x等の場合も同様でしょうか?

ご回答宜しくお願いします。

A 回答 (3件)

参考URLが正しければ、


最初のケースでは、*(x++)となり
2番目のケースは++(*x)となるように思います。
cygwin+gccで試したら実際そうでした。

参考URL:http://www.komonet.ne.jp/~c/chap14.htm
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
先ほど、試してみましたが、proustさんがおっしゃて
いた通りに動作しました。

お礼日時:2004/04/30 00:37

ポインタ変数に対する++と+1の結果は同じです>#1



int *i = 0;
printf("%p\n", i);
printf("%p\n", i+1);
printf("%p\n", i);
printf("%p\n", ++i);

これを実行すると
00000000
00000004
00000000
00000004
となります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>>ポインタ変数に対する++と+1の結果は同じです>#1

そうだったんですか。私にとっても勉強になりました。ありがとうございます。

お礼日時:2004/04/30 00:39

C言語では、各単項演算子に優先度が決められていますので、どの処理系であっても同じ結果になるはずです。


ただ、ポインタに対する++は、そのポインタが示す型のサイズ分だけ増加しますので、+1とは結果が異なります。

参考URL:http://www.mcr.gr.jp/begin/5/p3.html
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
優先度の話は少し聞いたことがあったのですが、すっかり忘れていました。参照URLで復習したいと思います。

>>ただ、ポインタに対する++は、そのポインタが
>>型のサイズ分だけ増加しますので、+1とは結果
>>なります。

この点は注意しないといけませんね。

どうも、ありがとうございます。

お礼日時:2004/04/30 00:21

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