アプリ版:「スタンプのみでお礼する」機能のリリースについて

インクリメント演算子(++や--)について伺いたいのですが、
以下のような場合、変数の前と後ろで何か処理上違いはあるのでしょうか?

//文字列の最後までポインタを進める
while ( *p1 ) {
++p1;
}

printf("%d" , *p++);

のように(文法が間違っていたらすいません)、
出力した後でインクリメントするといった使い方の違いは分かるのですが、インクリメント単独処理での前後の違いがあれば教えていただきたいです。

A 回答 (4件)

関数内で使用した場合は御存知のように結果が変わってきますが、


単独で使用した場合は動作に違いはありません。
どちらを書くかは、その人の好みです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/08 15:57

スカラ型であれば、単独で使った場合は、前置でも後置でも同じです。



pが反復子などクラス型の場合は、特別な事情が無い限り前置形式にすべきです。
後置形式にすると、それだけ効率が悪くなりますし、一時オブジェクトの生成時等に例外が送出されるリスクもあります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/08 16:00

こんにちは。



例では同じ結果になりますが、
インクリメントの入った文内で何か操作しようとする場合は違いがでます。
以下のアドレス表示のプログラムを実行すると解ると思いますが。
アドレス移動のタイミングが違います。
即興で作ったので問題あったらご勘弁ください。

#include <stdio.h>

int main (void)
{
inti;
charstr[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;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/08 16:00

> 以下のような場合



とは、

> ++p1;



> *p++

の両方を指していますか?
仮にそうだとすると、
前者の場合、p1++ でも同じです。

後者の場合、書かれたコードでは、*pにアクセスしてからポインターpをインクリメントします。一方、
*++p では、ポインターpをインクリメントしてから*pにアクセスします。
なお、後者の場合、(*p)++ と書くと*pの値をインクリメントします。*p++とは全く意味が異なります。
ご参考までに。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/08 16:00

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