C 學習筆記 11 多維陣列

2021-09-30 11:41:26 字數 2378 閱讀 1105

多維陣列

【多維陣列】

如果乙個一維陣列中的每個元素都是同型別同大小的一維陣列,情況會是什麼樣子呢?下圖表示了乙個(m+1)×(n+1)的二維陣列,,二維陣列實質上是對一維陣列的擴充套件,其中的每個元素要用兩個下標來表示,前乙個稱為行下標,後乙個稱為列下標。

【宣告乙個多維陣列】

和一維陣列一樣,宣告的主要作用就是提供給編譯器足夠多的資訊,以便編譯器在記憶體中開闢一塊連續的,滿足大小要求的記憶體區域,並將陣列名和這塊區域關聯起來,這些資訊包括:

(1)陣列名。

(2)元素型別。

(3)陣列的維數。

(4)陣列的大小,多維陣列的大小是各維大小之積。

乙個二維陣列可以用下列語句來宣告:

int sz[2][3];

這宣告了乙個2×3的二維陣列,共有2行3列計6個元素,對多維陣列來說,元素的編號仍舊是從0開始的,所以,對上面這個二維陣列來說,這6個元素分別為:

sz[0][0]、sz[0][1]、sz[0][2]、sz[1][0]、sz[1][1]、sz[1][2]

【初始化多維陣列】

多維陣列同樣可以在宣告的同時對其中的元素進行初始化,如:

intsz[3][4]=,,};

或對部分元素進行初始化,如:

intsz[3][4]=,,};

上面的語句僅初始化陣列每一行的第乙個元素,而未給其它元素賦初值,這種情況下,其他元素將自動初始化為0。

在宣告的同時初始化其中元素時,在一行中的元素用花括號包裹,並且用逗號隔開。

當宣告語句中提供有全部元素的初始值時,第一維的大小可以預設,如:

int sz[4]=,,};

只提供部分元素的初始值時,必須能讓編譯器判斷第一維的大小,這個引數才可省略,如:

int sz[4]=,,}; //等價於int sz[ ][4]=,}; 編譯器認為是2×4維

【多維陣列的應用】

**示例:

執行結果:

在寫**的時候發現以下問題,把上面框中的**換成下列**:

執行結果:

這裡有個演算法要注意,在操作翻轉迴圈的時候,如果不是選擇j=i+1;而是j=0開始的話,那麼編譯器會執行兩側翻轉,那結果就和沒有翻轉是一樣的了,就是以上顯示的結果了,大家注意。

【多維陣列在記憶體中的元素排列】

維數決定了陣列中元素的組織方式及訪問元素說用的下標個數,但本質上講,所有的陣列在記憶體中都是一維線性的。以二維陣列為例,記憶體中是先放第一行的元素,再放第二行的元素,依次類推,下面給出了大小為3×4的二維陣列a的排列順序:

•  a[0][0]-> a[0][1]->a[0][2]-> a[0][3]->

•  a[1][0]-> a[1][1]->a[1][2]-> a[1][3]->

•  a[2][0]-> a[2][1]->a[2][2]-> a[2][3]

多維陣列的儲存方式與此類似,以n維陣列為例,記憶體中先放前n-1維索引都為0的那些元素,再放前n-2維座標為0,第n-1維座標為1的那些元素,下面給出3×3×3的三維陣列b中元素在記憶體中的排列順序:

•  b[0][0][0]->b[0][0][1]-> b[0][0][2]->

•  b[0][1][0]->b[0][1][1]-> b[0][1][2]->

•  b[0][2][0]->b[0][2][1]-> b[0][2][2]->

•  b[1][0][0]-> b[1][0][1]->b[1][0][2]->

•  b[1][1][0]->b[1][1][1]-> b[1][1][2]->

•  b[1][2][0]->b[1][2][1]-> b[1][2][2]->

•  b[2][0][0]->b[2][0][1]-> b[2][0][2]->

•  b[2][1][0]->b[2][1][1]-> b[2][1][2]->

•  b[2][2][0]->b[2][2][1]-> b[2][2][2]->

由於多維陣列在記憶體中採用的是線性儲存的,元素存放的順序也是確定的,在宣告乙個陣列的同時對其初始化時,也可以採取下面的形式:

int x[3][4]=;

C 學習筆記11 動態陣列與多維陣列

1,new與delete 儲存動態建立的物件的記憶體區域稱為自由儲存區 free store 與堆 heap new表示式 int pia new int 10 未初始化 string psa new string 7 呼叫預設建構函式初始化 int pia new int 10 初始化為0 del...

c 學習筆記6,陣列,多維陣列

初始化陣列 double balance 5 訪問陣列元素 陣列元素可以通過陣列名稱加索引進行訪問。元素的索引是放在方括號內,跟在陣列名稱的後邊。例如 double salary balance 9 上面的語句將把陣列中第 10 個元素的值賦給 salary 變數。下面的例項使用了上述的三個概念,即...

C 筆記 3 6 多維陣列

嚴格來說,c 語言中沒有多維陣列,通常所說的多維陣列其實是陣列的陣列。二維陣列作為函式引數,不能省略二維大小二維陣列作為函式引數,實參可以直接使用二維陣列名,在被呼叫函式中對形引數組定義可以指定所有維數的大小,也可以省略第一維的大 明,如 void func int a 3 4 void func ...