0

C で書かれたプログラムに出くわし、ポインタ比較プログラムを見ました。私が理解できなかったのは、これら2つのステートメントです。

j=&arr[4];
k=(arr+4);

最初のステートメントは 5 番目の要素のアドレスを保持しており、2 番目のステートメントの構文は初めて見たものです。誰かが私に2番目のステートメントを説明できますか. また、プログラムを実行した後も j と k は等しくなります。したがって、それらは同じ場所を指しています。

4

7 に答える 7

3

k =(arr + 4);

へのポインタに減衰された後、位置kの4つ前の要素を指すことを意味します。arrindex 0

配列名は、ゼロインデックスへのポインタに減衰します。4を追加すると、5番目の要素を指すことになります。

ここに画像の説明を入力してください

于 2012-10-31T11:12:17.383 に答える
1

これは単にポインタ演算であり、Cのインデックス付け<->ポインタ差分の同等性と混合されています。

前者は、式arr + 4によってarr(配列の名前)が単に配列の最初の引数へのポインターに減衰することを意味します。言い換えれば、arr == &arr[0]本当です。

後者は、任意のポインタaと整数iについて、この同等性です。

a[i] === *(a + i)

これは、最初の式であるへの割り当てをjとして読み取ることができることを意味しますj = &(*(a + 4))。これにより、行と同じように、インデックス4の要素のアドレスを取得していることが(かなり)明確になりますk

于 2012-10-31T11:12:40.897 に答える
1

それは悪名高いポインター演算です! このステートメントは、 が指すアドレスに要素のアドレスを割り当て、arr右に 4 つの要素のオフセットを割り当てるだけです。arr + 4のアドレスを指していますarr[4]

于 2012-10-31T11:11:03.627 に答える
0

このコードは、ポインター演算の単純なケースを使用しています。配列のアドレス(+4アドレス、つまり5番目の要素)をポインターkに割り当てます。

于 2012-10-31T11:12:38.353 に答える
0

すべての arr[4] ステートメントは (arr+4) に費やされています。コンパイラ自体によるステートメント。

これら 2 つは同等であり、同じ意味で使用できます。

于 2012-10-31T11:15:32.580 に答える
-1

どちらもポインター値を取得する方法です。

最初arr[x]に (x+1) 配列の内容を返し、& 演算子でそのアドレスを取得できます。Second はポインター演算として知られており、arr ポインターのアドレスに x 位置を加えたアドレス、つまり x+1 アドレスを返します。

于 2012-10-31T11:14:19.963 に答える
-1

これは基本的なポインター演算です。k はポインター、arr は配列の最初の要素へのポインター (arr[0] へのポインター) です。したがって、k に 4 を追加すると、ポインタが 4 つの要素に移動します。したがって、k=(arr+4) は、k が 5 番目の要素である arr[4] を指すことを意味し、j と同じです。

于 2012-10-31T11:40:46.427 に答える