1. 程式人生 > >C ++ 指標 | 指標與二維陣列_5

C ++ 指標 | 指標與二維陣列_5

指標與二維陣列

 根據上面的圖,我現在寫一些語句,我們一起來判斷輸出值是多少!!

int (*p)[3] = B;
print B;

這個會列印多少?

思考一下。。。。。。。

。。。

。。。

。。。


列印:

400

print *B;

這個會列印多少?

思考一下。。。。。。。

。。。

。。。

。。。


列印:

400

print B[0];

這個會列印多少?

思考一下。。。。。。。

。。。

。。。

。。。


列印:

400

print B[0][0];

這個會列印多少?

思考一下。。。。。。。

。。。

。。。

。。。


列印:

400

print(B+1);

這個會等於多少?

思考一下。。。。。。。

。。。

。。。

。。。


列印:

412

print(*(B+1))

這個會等於多少?

思考一下。。。。。。。

。。。

。。。

。。。


列印:

412

okay,以上是二維陣列與一維不一樣的輸出。我們總結為以下:

B[ i ][ j ] = *( B[ i ] + j )  = *( *( B + i )  + j )

解釋:

*( B[ i ] + j ) :

我們知道 B[ i ] 是一個地址,指定第幾行的頭地址。+j,也就是第幾行的具體的某個地址。

因為 B[ i ] 和 *( B + i ) 是相等的,都是返回陣列的第幾行的頭地址,所以也就等於 *( *( B + i )  + j ) 。

B[ i ][ j ] 其實就是一個轉換 *( *( B + i )  + j ) 的語法。

另外,下面這句是什麼意思 呢?

int (*p)[3] = B;

( *p ) 就是指向陣列第一個元素的指標。


對程式碼不滿足,是任何真正有天才的程式設計師的根本特徵。