陣列是處理批量同類型數據的核心結構。本文系統講解一維/二維陣列的定義、初始化、訪問模式、記憶體佈局,並以學生成績統計、矩陣轉置、斐波那契、排序查找等經典案例強化實戰能力。
int a[10]; // 未初始化,值不定
int b[10] = {1,2,3}; // 部分初始化,剩餘自動為 0
int c[] = {1,2,3,4,5}; // 完全初始化可省略長度
float f[3] = {1.0, 2.0, 3.0};
關鍵限制:初始化列表僅能用於定義時,定義後不可整體賦值(a = {1,2} 錯誤)。
// 索引法
for (i=0; i<10; i++) scanf("%d", &score[i]);
// 指針法(高效,編譯器優化友好)
for (p = arr; p < arr+10; p++) scanf("%d", p);
for (p = arr; p < arr+10; p++) printf("%d ", *p);
#define N 30
float score[N];
int count[4] = {0}; // [0]優 [1]良 [2]及格 [3]不及格
for (i=0; i= 85) count[0]++;
else if (score[i] >= 70) count[1]++;
else if (score[i] >= 60) count[2]++;
else count[3]++;
}
float good_rate = (float)count[0] / N;
float pass_rate = (float)(N - count[3]) / N;
// 輸出並標記不及格
for (i=0; i
int a[3][4]; // 3 行 4 列,行優先連續存儲
// 記憶體順序:a[0][0] a[0][1] ... a[0][3] a[1][0] ... a[2][3]
int a[2][3] = {1,2,3,4,5,6}; // 扁平化按序填充
int b[2][3] = {{1,2,3},{4,5,6}}; // 分行初始化(推薦,可讀性強)
int c[3][3] = {{1},{2},{3}}; // 僅初始化每行首元素
int d[3][3] = {{0,1},{0,0,3},{4}}; // 稀疏初始化,省略前導 0 需佔位
#define M 3
#define N 4
int a[M][N], b[N][M];
// 輸入
for (i=0; i
| 算法 | 核心邏輯 | 時間複雜度 |
|---|---|---|
| 尋找最大值 | 遍歷比較,記錄最大值及索引 | O(n) |
| 冒泡排序 | 雙層迴圈,相鄰交換,大值沉底 | O(n²) |
| 選擇排序 | 每輪選最小值換到有序區末尾 | O(n²) |
| 二分查找 | 前提:有序,中點比較縮小區間 | O(log n) |
| 判斷回文 | 雙指針首尾向中間比較 | O(n) |
[0, len-1],迴圈條件用 i < len 而非 i <= len。int a[10] = {0};)。int a[] 實為 int*,sizeof(a) 失效,必須額外傳長度。void f(int a[][4], int rows),或用一維指針模擬 int* a 手動計算偏移。陣列是 C 語言最高效的數據聚合結構。熟練掌握初始化語法變體、指針法遍歷、行優先記憶體模型、經典算法模板,並養成邊界檢查與參數傳長度習慣,即可驾馭絕大多數陣列處理任務。進階可探索動態記憶體分配(malloc/free)實現可變長陣列,以及多維陣列扁平化優化快取局部性。