1. 程式人生 > >C++陣列和指標,多維陣列

C++陣列和指標,多維陣列

陣列不是指標,陣列名的值是一個指標常量。

依據《c和指標》《c專家程式設計》上的例子,來總結一下。

int array[10];
int *ap =array + 2;

然後會有以下例子:

在c/c++中,array[2],2[array]是一樣的,源自於同樣的 *(array +2)的指標形式寫法

多維陣列(從二維陣列說起)

*(*(p+i)+j)//是p[i][j]

二維陣列函式傳參比較麻煩,下圖參考《c專家程式設計》

int data[3][4] = {{1,2,3,4}, {9,8,7,6}, {2,4,6,8}};

以上的陣列也可以寫成一維的形式:

int data[3][4] = {1,2,3,4,9,8,7,6,2,4,6,8};

或:

int data[][4] = {1,2,3,4, 9,8,7,6, 2,4,6,8};
二維陣列在記憶體中的儲存其實質是一維的。二維陣列為一個數組的陣列(見上一個圖),也就是元素是陣列的陣列。二維陣列完全可以理解為一個行列式,如上面的二維陣列就是一個三行四列的陣列。三行就是三個一維陣列(或三個指標,每個指標表示一個一維陣列)data[0]、data[1]、data[2].

/////////這是作為個人去理解////////////////

data[3][4]作函式引數時可以用下面的形式進行呼叫:

int sum(data,3);

為什麼第二個引數是3而不是4呢?data陣列的元素是3個(相當於是一個一維的3個元素的陣列,其元素的型別又是一個一維陣列)。data這種型別可以理解為:pointer-to-array-of four-int。

二維陣列作函式引數時可以用下面的原型定義:

int sum(int (*ar2)[4], int size);

表示處理一個size行4列的函式。

int (*ar2)[4]是一個數組指標。ar2是一個指標,指向一個整型的一維陣列,這個一維陣列的長度是4。

理解指標陣列與陣列指標,先要理解一個運算子優先順序的問題,“[]”的優先順序比“*”要高。int *ar2[4],p1 先與“[]”結合,所以先是一個數組,因為又有*的宣告,所以是一個指標陣列。int (*ar2)[4],()優先順序高,所以表明這個宣告是一個指標,然後有陣列[]的修飾,表明是一個數組指標。