1
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int (*parr)[10] = &arr;

//prints address of arr and the value 1
cout << parr << " " << *parr[0];

//what is this doing?
parr++;

//prints (what looks like the address of arr[1]) and some long number -8589329222
cout << parr << " " << *parr[0]; 

*parr[0]が*parr[1]のアドレスになるように、parr++がparrが指しているアドレスをインクリメントすると思いました。どこが間違っていますか?

4

2 に答える 2

7

parr++1単語ずつインクリメントすると想定しています。そうではありません。のサイズだけインクリメントします*parr。この場合は です。つまりint[10]、10 個の整数 (おそらく 40 バイト) のサイズだけインクリメントします。

于 2012-09-10T22:54:07.313 に答える
2

配列の先頭へのポインターのみが必要です。

int* parr = arr; // points to the 0 element
parr++; // poInts to the first element, 1.
于 2012-09-10T22:57:16.777 に答える