-1

重複の可能性:
なぜ ++*p++ は機能するのに ++i++ は機能しないのですか?

これはcで可能ですか?そうでない場合、その理由は何ですか?

int main()
{
  char *p="hai friends";
   while(*p!='\0')
   {
      ++*p++;
      printf("%c\n",*p);
   }
}
4

1 に答える 1

3

この特定の例

char *p="hai friends";
while(*p!='\0')
{
    ++*p++;
    printf("%c\n",*p);
}

文字列リテラルを変更しようとするため、未定義の動作です。しかし、一般的に、ポインターの場合、次のことができます

++*p++;

ポストインクリメントとプリインクリメントは異なるエンティティを参照するためです。ポストインクリメントはポインタをインクリメントし、プリインクリメントはポイント先の値をインクリメントします。

同じエンティティで前デクリメントと後デクリメントを使用すると、未定義の動作が再び発生します。これは、シーケンス ポイントに介入することなく変数を 2 回変更するためです。

于 2012-07-09T05:43:54.567 に答える