目錄
- 引言
- 一維數組
- 數組的定義
- 數組的初始化
- 完全初始化
- 部分初始化
- 省略數組長度
- 數組元素的訪問
- 多維數組
- 二維數組的定義
- 二維數組的初始化
- 完全初始化
- 部分初始化
- 省略第一維長度
- 二維數組元素的訪問
- 遍歷數組元素
- 遍歷一維數組
- 遍歷二維數組
- 數組作為函數參數
- 一維數組作為函數參數
- 二維數組作為函數參數
- 注意事項
- 數組越界
- 數組名作為指針
- 總結
引言
在 C 語言的世界里,數組是一種基礎且強大的數據結構。它就像一個整齊排列的盒子,每個盒子都可以存放相同類型的數據。通過合理使用數組,我們能夠高效地處理大量的數據。本文將從數組的基本概念入手,逐步深入探討其在實際編程中的應用。
一維數組
數組的定義
在 C 語言中,定義一維數組的語法如下:
類型說明符 數組名[常量表達式];
這里的類型說明符決定了數組中每個元素的類型,比如int表示整數類型,float 表示浮點類型等。數組名是我們給這個數組起的名字,方便后續引用。而常量表達式則規定了數組的長度,也就是數組中元素的個數。
例如:
int scores[5];
這行代碼定義了一個名為 scores 的整數數組,它可以存儲 5 個整數。需要注意的是,常量表達式必須是一個常量或者常量表達式,不能是變量。
數組的初始化
數組的初始化有多種方式,下面我們來逐一介紹。
完全初始化
當我們知道數組中每個元素的值時,可以進行完全初始化。
int numbers[5] = {1, 2, 3, 4, 5};
在這個例子中,數組 numbers 的 5 個元素分別被初始化為 1、2、3、4、5。
部分初始化
如果只知道數組的部分元素值,其余元素會被自動初始化為 0。
int numbers[5] = {1, 2};
此時,numbers[0] 為 1,numbers[1] 為 2,而 numbers[2]、numbers[3] 和 numbers[4] 都為 0。
省略數組長度
當我們在初始化時提供了所有元素的值,可以省略數組的長度,編譯器會自動根據初始化的值來確定數組的長度。
int numbers[] = {1, 2, 3, 4, 5};
這里數組 numbers 的長度被編譯器確定為 5。
數組元素的訪問
數組元素通過下標來訪問,下標從 0 開始。例如,對于前面定義的numbers數組,numbers[0]表示數組的第一個元素,numbers[1]表示第二個元素,以此類推。
#include <stdio.h>int main() {int numbers[5] = {1, 2, 3, 4, 5};printf("The first element is: %d\n", numbers[0]);printf("The third element is: %d\n", numbers[2]);return 0;
}
在這段代碼中,我們通過下標訪問了數組numbers的第一個和第三個元素,并將它們打印輸出。
多維數組
二維數組的定義
二維數組可以看作是一個矩陣,它的定義語法如下:
類型說明符 數組名[常量表達式1][常量表達式2];
常量表達式 1 表示數組的行數,常量表達式 2 表示數組的列數。
例如:
int matrix[3][4];
這定義了一個 3 行 4 列的二維數組matrix。
二維數組的初始化
二維數組的初始化也有多種方式。
完全初始化
int matrix[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}
};
這里,我們將二維數組 matrix 的每個元素都進行了初始化。
部分初始化
int matrix[3][4] = {{1, 2},{5},{9, 10, 11}
};
未初始化的元素會被自動初始化為 0。
省略第一維長度
int matrix[][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}
};
編譯器會根據初始化的值自動確定第一維的長度。
二維數組元素的訪問
二維數組元素通過行下標和列下標來訪問,行下標和列下標都從 0 開始。
#include <stdio.h>int main() {int matrix[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};printf("The element at row 1, column 2 is: %d\n", matrix[1][2]);return 0;
}
在這個例子中,我們訪問了二維數組 matrix 中第二行第三列的元素。
遍歷數組元素
遍歷一維數組
for 循環是遍歷一維數組最常用的方法,通過控制循環變量作為數組的下標來依次訪問數組元素。
#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5};int i;// 遍歷數組并打印每個元素for (i = 0; i < 5; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}
遍歷二維數組
對于二維數組,通常使用嵌套的 for 循環來遍歷,外層循環控制行,內層循環控制列。
#include <stdio.h>int main() {int arr[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};int i, j;// 外層循環控制行for (i = 0; i < 3; i++) {// 內層循環控制列for (j = 0; j < 4; j++) {printf("%d ", arr[i][j]);}printf("\n");}return 0;
}
數組作為函數參數
數組可以作為函數的參數傳遞,這在處理大量數據時非常有用。
一維數組作為函數參數
當一維數組作為函數參數時,實際上傳遞的是數組的首地址。
#include <stdio.h>// 函數聲明
void printArray(int arr[], int size);int main() {int numbers[5] = {1, 2, 3, 4, 5};printArray(numbers, 5);return 0;
}// 函數定義
void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}
在這個例子中,函數 printArray 接受一個一維數組和數組的長度作為參數,并將數組中的元素打印輸出。
二維數組作為函數參數
二維數組作為函數參數時,需要指定第二維的長度。
#include <stdio.h>// 函數聲明
void printMatrix(int matrix[][4], int rows);int main() {int matrix[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};printMatrix(matrix, 3);return 0;
}// 函數定義
void printMatrix(int matrix[][4], int rows) {for (int i = 0; i < rows; i++) {for (int j = 0; j < 4; j++) {printf("%d ", matrix[i][j]);}printf("\n");}
}
這里,函數 printMatrix 接受一個二維數組和數組的行數作為參數,并將二維數組的元素打印輸出。
注意事項
數組越界
在訪問數組時,一定要確保下標在合法范圍內。如果下標超出了數組的長度,會導致未定義行為,可能會引發程序崩潰或產生不可預期的結果。
數組名作為指針
在大多數情況下,數組名會被隱式轉換為指向數組首元素的指針。但在使用sizeof運算符時,數組名表示整個數組。
#include <stdio.h>int main() {int numbers[5] = {1, 2, 3, 4, 5};printf("The size of the array is: %zu\n", sizeof(numbers));return 0;
}
在這個例子中,sizeof(numbers) 返回的是整個數組的大小,而不是指針的大小。
總結
C 語言數組是一種非常重要的數據結構,它可以幫助我們高效地處理大量相同類型的數據。通過掌握一維數組、多維數組的定義、初始化和訪問,以及數組作為函數參數的使用方法,我們能夠編寫出更加高效、靈活的程序。同時,要注意數組越界等問題,避免程序出現錯誤。希望本文能幫助你更好地理解和使用 C 語言數組。