c語言學習筆記之陣列(二)

2021-10-02 11:10:59 字數 1910 閱讀 3100

如果一維陣列可以理解為乙個佇列,那麼二維陣列便是乙個矩陣,有行數有列數。

二維陣列的定義和一維陣列類似:

型別說明符 陣列名[常量表示式]

[常量表示式]

;

比如:

float a[3]

[4],b[5]

[10];

定義a為3行4列的陣列,b為5行10列的陣列。所以在定義時,第乙個方括號內表示行,第二個方括號表示列。

二位陣列其實可以看做為乙個特殊的一維陣列,比如a[3][4]首先將a看做一維陣列,有三個元素:

a[0],a[1],a[2],每個元素又是乙個一維陣列包含4個元素:

a[0][4],a[1][4],a[2][4]。這在指標部分會再詳細講。

當我們定義一維陣列時,是在記憶體中分配一段連續的空間,二維陣列也是一樣,二維陣列在邏輯上可以看做乙個矩陣,但是在記憶體中還是按照線性來儲存的,首先在記憶體儲存第一行,然後在第一行後面儲存第二行,依次往下,並不會在記憶體中開闢乙個矩陣空間來儲存。

二維陣列元素的引用

二維陣列元素可表示為

陣列名 [下標]

[下標]

;

二維陣列和一維陣列一樣,不論行還是列都是從0開始,比如a[0][0],表示陣列a第一行第乙個元素,a[2][3]表示第三行第四個元素。

二維陣列的初始化

1、分行給陣列賦值

int a[3]

[4]=

,,};

這種辦法比較直觀,三個大括號表示有三行,大括號裡的四個元素表示每行裡面的具體元素。

2、可以將所有元素都寫在乙個大括號內,按照陣列元素在記憶體中的排列順序對各元素進行賦值。

int a[3]

[4]=

;

這種辦法效果比較好,但不推薦,因為沒有第一種辦法直觀,當元素變多時容易混亂。

3、對部分元素進行賦值

對部分賦值時道理和一維陣列一樣,優先賦值給排列靠前的元素,比如int a[3][4] = ,,};這就是分別給每行的第乙個賦值,其餘補0。

再比如int a[3][4] = ,};這就是對前兩行賦值,其中第一行第乙個賦值,第二行前兩個賦值,其餘補0。

當然也可以將第二行不賦值,但是括號得有,比如int a[3][4] = ,{},};這就是對一三行賦值,其中第一行對第乙個數賦值,第三行對前兩個數賦值,其餘補0。

在定義二維陣列時,行的長度可以不定義,但是列的長度必須定義,系統會根據列的長度和元素個數來計算行的長度。

比如:int a[3][4] = ;

int a[4] = ;

這兩種定義時等價的。

如果按照分行定義的辦法來定義的話,可以部分初始化陣列並且不定義行的長度。比如:

int a[4] = ,{},};

這就告訴了編譯系統有三行每行有四個元素。

有乙個3x4的矩陣,找出最大值,

矩陣為:

2 4 1 7

0 48 24 12

-13 -1 14 99

111 44 55 67

#include

intmain()

,,,}

;int max = a[0]

[0];

int i,j,r,l;

for(i =

0;i<

3;i++)}

}printf

("max=%d\nr=%d\nl=%d\n"

,max,r,l)

;return0;

}

執行結果:

C語言學習筆記之陣列(一)

陣列是一組有序資料的集合,陣列依靠陣列名和下標來唯一確定陣列中的元素,陣列中的每乙個元素都屬於同一種資料型別。在理解陣列之前回憶一下變數的定義過程,比如定義整型資料,int a 在執行到這句話的時候,在記憶體裡分配乙個4個位元組大小的記憶體空間用來存放資料,而陣列便是開闢一段連續的空間來存放一組資料...

C語言學習筆記之陣列(三)

定義字元陣列和數值型的陣列格式是一樣的,資料型別為char型。如char a 10 這就定義了長度為10的陣列,每個元素都存放乙個字元。對字元的初始化,最容易理解的是用 初始化列表 把各個字元一次賦給陣列中的元素。例如 char a 10 把這十個字元一次賦給a 0 a 9 如果定義字元陣列不進行初...

C語言學習之陣列

一維陣列的定義方式 資料型別 陣列名 整型常量表示式 注意 方括號中只能是常量表示式,不能使用變數。常量表示式的值表示陣列最多能存放的元素的個數,也稱為陣列的大小 陣列所佔總位元組數 sizeof 資料型別 陣列大小 int k 5 float c k 不合法,k是變數 define m 20 in...