在 C 語言中,數組是一種非常重要的數據結構,它可以將多個相同類型的元素組織在一起,以便于我們進行批量處理和操作。本文將詳細介紹 C 語言中的一維數組和二維數組,包括它們的定義、初始化、元素訪問以及內存存儲等方面的內容。
一、數組基本概念
數組是一組相同類型元素的集合,這些元素在內存中占據連續的存儲空間。數組的元素可以通過下標來訪問,下標從 0 開始。C 語言支持一維數組、二維數組以及多維數組,本文主要討論一維數組和二維數組。
二、一維數組
(一)一維數組的定義
在 C 語言中,定義一維數組的一般形式為:
數據類型 數組名[數組長度];
其中,數據類型可以是 int、float、char 等基本數據類型,也可以是結構體等用戶自定義數據類型;數組名是一個標識符,用于標識這個數組;數組長度必須是一個常量表達式,表示數組中元素的個數。?
例如,定義一個包含 5 個整型元素的數組:
int arr[5];
(二)一維數組的初始化
在定義數組的同時,可以對數組進行初始化,一維數組的初始化方式有以下幾種:
1.完全初始化:給數組的每個元素都賦初值。
int arr[5] = {1, 2, 3, 4, 5};
?2.不完全初始化:只給數組的前幾個元素賦初值,后面未賦值的元素會自動初始化為 0(對于整型數組)或 0.0(對于浮點型數組)。
int arr[5] = {1, 2}; // 等價于{1, 2, 0, 0, 0}
3.省略數組長度初始化:在初始化時不指定數組的長度,編譯器會根據初始化列表中的元素個數自動確定數組的長度。
int arr[] = {1, 2, 3, 4, 5}; // 數組長度為5
(三)一維數組元素的訪問
數組元素可以通過下標來訪問,下標的范圍是 0 到數組長度減 1。例如,對于上面定義的數組 arr,它的元素可以表示為 arr [0]、arr [1]、arr [2]、arr [3]、arr [4]。
我們可以通過賦值語句給數組元素賦值,也可以通過輸入函數從鍵盤讀取值賦給數組元素。例如:
scanf("%d", &arr[1]);
?(四)一維數組的內存存儲
一維數組中的元素在內存中是按照元素的順序連續存儲的,每個元素占據的存儲空間大小由數據類型決定。例如,對于 int 類型的數組,每個元素占據 4 個字節(在 32 位系統中)。數組名代表數組在內存中的首地址,即第一個元素的地址。
三、二維數組
(一)二維數組的定義
二維數組可以看作是一維數組的數組,即每個元素又是一個一維數組。在 C 語言中,定義二維數組的一般形式為:
數據類型 數組名[行長度][列長度];
其中,行長度表示二維數組的行數,列長度表示每行的列數,它們都必須是常量表達式。
例如,定義一個 3 行 4 列的整型二維數組:
int arr[3][4];
?(二)初始化二維數組的初始化
二維數組的初始化方式有以下幾種:
1.按行初始化:將二維數組的每一行元素用花括號括起來,逐行進行初始化。
int arr[3][4] = {{1,2,3,4},{2,3,4,5},{3,4,5,6}};
2.按順序初始化:將所有元素按行優先的順序放在一個花括號中進行初始化。
int arr[3][4] = {1,2,3,4,2,3,4,5,3,4,5,6};
3.不完全初始化:只給部分元素賦初值,未賦值的元素會自動初始化為 0。
int arr[3][4] = {{1,2},{2,3,4},{3}};
此時,數組第一行前兩個元素為1,2,后兩個元素為0;第二行前三個元素為2,3,4,第四個元素為0;第三行第一個元素為3,其余元素均為0。
4.省略行長度初始化:在初始化時可以省略行長度,但不能省略列長度,編譯器會根據初始化列表中的元素個數和列長度自動確定行長度。
int arr[][4] = {{1, 2, 3, 4}, {2,3,4,5}, {3,4,5,6}};
(三)訪問二維數組元素
二維數組元素的訪問需要使用兩個下標,第一個下標表示行,第二個下標表示列,下標均從 0 開始。例如,對于上面定義的數組 arr,它的元素可以表示為 arr [i][j],其中 i 的取值范圍是 0 到 2,j 的取值范圍是 0 到 3。
(四)二維數組的內存存儲
二維數組在內存中也是連續存儲的,它按照行優先的順序存儲,即先存儲第一行的所有元素,然后存儲第二行的所有元素,以此類推。例如,對于 3 行 4 列的二維數組 arr,其元素在內存中的存儲順序為 arr [0][0]、arr [0][1]、arr [0][2]、arr [0][3]、arr [1][0]、arr [1][1]、arr [1][2]、arr [1][3]、arr [2][0]、arr [2][1]、arr [2][2]、arr [2][3]。
二維數組名代表數組在內存中的首地址,即第一行第一個元素的地址。arr [i] 表示第 i 行的首地址,arr [i] 就相當于一個一維數組名。
四、數組使用注意事項
1.數組下標不能越界,否則會導致未定義行為,可能會破壞內存中的其他數據,甚至導致程序崩潰。
2.數組名是一個常量指針,不能對其進行賦值操作。例如,arr = arr + 1; 是錯誤的。
3.在傳遞數組參數時,通常需要同時傳遞數組的長度,因為在函數參數中,數組會退化為指針,無法獲取數組的長度。
?