• 締切済み

インクリメント演算子の前後

インクリメント演算子(++や--)について伺いたいのですが、 以下のような場合、変数の前と後ろで何か処理上違いはあるのでしょうか? //文字列の最後までポインタを進める while ( *p1 ) { ++p1; } printf("%d" , *p++); のように(文法が間違っていたらすいません)、 出力した後でインクリメントするといった使い方の違いは分かるのですが、インクリメント単独処理での前後の違いがあれば教えていただきたいです。

みんなの回答

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.4

> 以下のような場合 とは、 > ++p1; と > *p++ の両方を指していますか? 仮にそうだとすると、 前者の場合、p1++ でも同じです。 後者の場合、書かれたコードでは、*pにアクセスしてからポインターpをインクリメントします。一方、 *++p では、ポインターpをインクリメントしてから*pにアクセスします。 なお、後者の場合、(*p)++ と書くと*pの値をインクリメントします。*p++とは全く意味が異なります。 ご参考までに。

ya-cha
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
noname#88772
noname#88772
回答No.3

こんにちは。 例では同じ結果になりますが、 インクリメントの入った文内で何か操作しようとする場合は違いがでます。 以下のアドレス表示のプログラムを実行すると解ると思いますが。 アドレス移動のタイミングが違います。 即興で作ったので問題あったらご勘弁ください。 #include <stdio.h> int main (void) { int i; char str[11], *p; p=str; for(i=0; i<10; i++ ) { printf( " address(1) : %p\n", ++p); } printf("\n"); p=str; for(i=0; i<10; i++ ) { printf( " address(2) : %p\n", p++); } return 0; }

ya-cha
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

スカラ型であれば、単独で使った場合は、前置でも後置でも同じです。 pが反復子などクラス型の場合は、特別な事情が無い限り前置形式にすべきです。 後置形式にすると、それだけ効率が悪くなりますし、一時オブジェクトの生成時等に例外が送出されるリスクもあります。

ya-cha
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
  • sasuke-
  • ベストアンサー率63% (7/11)
回答No.1

関数内で使用した場合は御存知のように結果が変わってきますが、 単独で使用した場合は動作に違いはありません。 どちらを書くかは、その人の好みです。

ya-cha
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。