首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言陣列完全指南:一維、二維陣列的定義、初始化與經典算法應用

     編輯:關於C

陣列是處理批量同類型數據的核心結構。本文系統講解一維/二維陣列的定義、初始化、訪問模式、記憶體佈局,並以學生成績統計、矩陣轉置、斐波那契、排序查找等經典案例強化實戰能力。

1. 陣列核心特性

  • 固定大小:編譯期確定,運行期不可變(C99 VLA 除外)。
  • 同質元素:所有元素類型相同,記憶體連續分佈。
  • 零基索引:長度 N 陣列,合法索引 0 ~ N-1。

2. 一維陣列

2.1 定義與初始化

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} 錯誤)。

2.2 訪問模式:索引法 vs 指針法

// 索引法
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);

2.3 實戰:學生成績統計系統

#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

3. 二維陣列

3.1 定義與記憶體佈局

int a[3][4];  // 3 行 4 列,行優先連續存儲
// 記憶體順序:a[0][0] a[0][1] ... a[0][3] a[1][0] ... a[2][3]

3.2 多樣化初始化

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 需佔位

3.3 矩陣轉置經典實現

#define M 3
#define N 4
int a[M][N], b[N][M];

// 輸入
for (i=0; i

4. 陣列經典算法模板

算法核心邏輯時間複雜度
尋找最大值遍歷比較,記錄最大值及索引O(n)
冒泡排序雙層迴圈,相鄰交換,大值沉底O(n²)
選擇排序每輪選最小值換到有序區末尾O(n²)
二分查找前提:有序,中點比較縮小區間O(log n)
判斷回文雙指針首尾向中間比較O(n)

5. 避坑指南

  1. 越界訪問:嚴守索引 [0, len-1],迴圈條件用 i < len 而非 i <= len。
  2. 未初始化讀取:定義即初始化(int a[10] = {0};)。
  3. 陣列參數退化:函數形參 int a[] 實為 int*,sizeof(a) 失效,必須額外傳長度。
  4. 二維陣列傳參:需指定列數 void f(int a[][4], int rows),或用一維指針模擬 int* a 手動計算偏移。

總結

陣列是 C 語言最高效的數據聚合結構。熟練掌握初始化語法變體、指針法遍歷、行優先記憶體模型、經典算法模板,並養成邊界檢查與參數傳長度習慣,即可驾馭絕大多數陣列處理任務。進階可探索動態記憶體分配(malloc/free)實現可變長陣列,以及多維陣列扁平化優化快取局部性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved