如果一維陣列可以理解為乙個佇列,那麼二維陣列便是乙個矩陣,有行數有列數。
二維陣列的定義和一維陣列類似:
型別說明符 陣列名[常量表示式]
[常量表示式]
;
比如:
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...