私は、次のプログラムを持っている:私は、次のコードの出力を理解するのに苦労し
int main()
{
char arr[] = "geeksforgeeks";
char *ptr = arr;
while(*ptr != '\0')
++*ptr++;
printf("%s %s", arr, ptr);
getchar();
return 0;
}
出力:hffltgpshfflt
与え
説明は次のとおりです。
1は、の優先順位と結合を知っている場合演算子はそれからあまり残っていることはありません。以下は演算子の優先順位です。したがって、表現++*ptr++
が効果は次の通りです
Postfixx ++ left-to-right
Prefix ++ right-to-left
Dereference * right-to-left
:
*ptr
の値がインクリメントされ
ptr
の値がインクリメントされ
このポインタ表現++*ptr++
を取得しているか私の質問があります実装され、なぜこの文 "printf("%s %s", arr, ptr);
"文字列 "geeksforgeeks"も印刷されませんか? 助けてください。
「geeksforgeeks」はどうやって印刷できますか? '' arr''の全ての文字がインクリメントされ、元の文字列はもう存在しません。 '' ptr''は '' arr''の最後にヌル文字を指してしまうので、空文字列として表示されることに注意してください。 – jasonharper
ポインタptrを使って元のarrを変更したので、変更されたものは "hffltgpshfflt"となります。 @jasonharper –
はい、正確です。 '' ptr''は、 '' arr''の各要素を順番に(最後にヌル文字に達すると停止します)指しています。これらの要素は先頭の '' ++ ''がインクリメントしているものです。 – jasonharper