これは、私が何を意味するかを説明するための簡単なプログラムです。長さ n を指定すると、標準入力によって読み取られる n 個の整数のシーケンスを初期化します。
int n, *seq, *current;
scanf("%d", &n);
seq = malloc(n*sizeof(int));
for (current = seq; current - seq < n; current++)
scanf("%d", current);
私の疑問は、最後のインクリメントがcurrent
割り当てられたメモリの外側の何かを指すようにすることです。明らかに、その場所から読み取るのはエラーです。しかし、その場所を読んでいない場合はどうなりますか?
プログラムは正しく実行されますが、私の質問は次のとおりです。
更新:そして、これを前のプログラムの最後に追加するのはどうですか?
for (current--; current - seq >= 0; current--)
printf("%d\n", *current);
@MOHAMEDの回答によると、それは無効な場所へのアクセスであるからではなく、最初の要素の1つ前の場所を指してcurrent - seq >= 0
いる場合に間違った結果が得られる可能性があるため、間違っています。current