以下のようなコードを書くと?
int arr[] = {6, 7, 8, 9, 10};
int *ptr = arr;
*(ptr++)+= 123;
arr []の要素は何ですか?
もともとarr[]は{6、130、8、9、10}になるはずですが、実際の結果は{129、7、8、9、10}です。理由はわかりませんか?
私の意見では、ptr ++は括弧内にあるので、ptrを最初に増やす必要がありますね。1つ増やした後、配列の2番目の要素を指す必要があります。
以下のようなコードを書くと?
int arr[] = {6, 7, 8, 9, 10};
int *ptr = arr;
*(ptr++)+= 123;
arr []の要素は何ですか?
もともとarr[]は{6、130、8、9、10}になるはずですが、実際の結果は{129、7、8、9、10}です。理由はわかりませんか?
私の意見では、ptr ++は括弧内にあるので、ptrを最初に増やす必要がありますね。1つ増やした後、配列の2番目の要素を指す必要があります。
の値ptr++
は、ptr
増分前の値です(副作用はptr
、式の評価中のある時点で増分しています)。
これは、で逆参照される値です*(ptr++)
。
後続の式で逆参照ptr
すると、次の要素、つまり値を持つ要素を指します7
。
++ptr
期待する動作が必要な場合は、(つまり、事前インクリメント)を使用します。括弧は、ポストインクリメントが発生するタイミングには影響しません。言い換えれば、それは優先順位とは何の関係もありません。
ptr ++の基本的な意味は、最初に使用してからインクリメントすることです。これが、ポストインクリメント演算子として知られている理由です。これは、変数ptrの値が更新されるのは、現在の命令の実行が終了し、変数が後続の命令で再び使用される場合のみであることを意味します。
While just the opposite applies for ++ptr is First Increment then use and it is known as Pre Increment Operator.
The effect of this ptr++ will take place only after ';' ptr++ is equivalent to ptr = ptr + 1; but this will done only after semicolon of that statement. ptr value will be arr[0] during the operation *(ptr++)+= 123; but after that statement ptr will be equivalent to arr[1]