だから私は次のコードスニペットを持っています:
#include <stdio.h>
void pointer_shift(int *a, int n);
int main(void) {
int a[] = {100, 101, 102};
pointer_shift(a1, 3);
}
void pointer_shift(int *a, int n) {
int i;
for (i = 0; i != n - 1; i++) {
*(a + i) = *(a + i + 1);
}
}
このスニペットでポインターがどのように機能するかを明確にしたいだけです。つまり、pointer_shift はint へのポインタである 'a' を受け取りますよね?a1 はこのパラメーターに渡され、配列は最初の要素へのポインターに減衰するため、機能します。
まず、上記の段落で述べたことが正しいことを願っています。第二に、 *(a + i) = *(a + i + 1); は何をしますか? 実際に?for ループの最初の繰り返しで、i = 0 だとします。次に、左側の *a は何にアクセスしますか? それはポインタを表していますか?* は逆参照演算子だと思い、ポインタが指すオブジェクトにアクセスします...そして、*a = *(a + 1) を設定します。(a + 1) は配列の次の要素ですが、この代入は正確には何をし、その理由は何ですか?
ありがとう!