7

このプログラムの出力がわかりません:

int arr[]={1,7,4,2,5,8};
int x=(&(arr[arr[1]-arr[4]])-arr);
printf("%d" ,x);

arr[arr[1]-arr[4]]は 4 です。これはどういう意味&(4)ですか? なぜ2を出力するのですか?

4

2 に答える 2

13
arr[1] - arr[4]

これは見た目通りです。7 - 5 = 2、それを次のように置き換えましょう2:

arr[2]

それも見た目通りです。4. は&そのアドレスを取得します。intこれは、配列の先頭から 2 秒のオフセットである ですarr

&(arr[2]) - arr

それは を引くので、 fromarrのオフセットが残ります。これは 2です。ほらね。arr[2]arrint

縮小した例を次に示します。


であると予想していた場合は8、まあ、それがポインター演算のやり方です。unsigned int両方を次のようにキャストします。

(unsigned int)&arr[2] - (unsigned int)arr

8少なくとも anintが 4 バイトの場合、が生成されます。(デモ)

于 2012-07-01T19:17:33.523 に答える
5

「2」の印刷値をどのように推定できるかを示すミニテックの回答を見てください。

ただし、あなたの場合、&オペレーターの仕組みを誤解していると思います。はい、そうarr[arr[1]-arr[4]]ですが、それはそれがやっている4という意味ではありません。やっています; の値ではなく、のアドレスを取得しています。&(arr[arr[1]-arr[4]])&4&(arr[2])arr[2]arr[2]4

于 2012-07-01T19:23:51.727 に答える