// 完全初始化
int a[5] = {1, 2, 3, 4, 5};
// 不完全初始化 — 剩餘元素**自動零初始化**
int b[5] = {1, 2, 3}; // {1,2,3,0,0}
int c[5] = {0}; // 全 0 (通用清零寫法)
// 省略長度 — 編譯器按初始化列表推導
int d[] = {10, 20, 30}; // 長度 3
// 未初始化 — 局部變量值不確定 (垃圾值),靜態/全局自動 0
int e[5];
| 操作 | 代碼片段 | 關鍵點 |
|---|---|---|
| 遍歷 | for (int i=0; i | 下標 0~n-1,越界 UB |
| 拷貝 | for (i=0; i | **不可** dst = src (指針賦值) |
| 查找 | for (i=0; i | 返回下標或 -1 |
| 插入 (有序) | 後移元素 → 放入 → 長度+1 | 需預留空間,O(n) |
| 刪除 | 前移元素覆蓋 → 長度-1 | O(n) |
| 反轉 | for (i=0,j=n-1; i | 原地 O(n) |
| 排序 | qsort(arr, n, sizeof(int), cmp); | 庫函數,需比較函數 |
| 最大/最小 | max=arr[0]; for(i=1;i | 單趟掃描 |
int a[5] = {1,2,3,4,5};
int b[5];
// ❌ 錯誤 1: 整體賦值 (只有定義時允許)
b = a; // error: assignment to expression with array type
// ❌ 錯誤 2: 下標越界
a[5] = 100; // UB: 最大下標 4
// ❌ 錯誤 3: 定義後整體初始化
int c[5];
c = {1,2,3,4,5}; // error: 初始化列表只能用於定義
// ✅ 正確拷貝
for (int i=0; i<5; i++) b[i] = a[i];
// 或 memcpy(b, a, sizeof(a));
int a[3][4]; // 3 行 4 列,共 12 個 int,連續佈局
// 內存順序: a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] ... a[2][3]
// a[i][j] 偏移 = (i * 4 + j) * sizeof(int)
// 扁平列表 (按行優先)
int a[3][4] = {1,2,3,4, 5,6,7,8, 9,10,11,12};
// 分行列表 (推薦,可讀性強)
int b[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 部分初始化
int c[3][4] = {{1,2}, {3}}; // 剩餘自動 0
// 行優先遍歷 (緩存友好)
for (int i=0; i<3; i++)
for (int j=0; j<4; j++)
printf("%d ", a[i][j]);
// 求每行最大值
for (int i=0; i<3; i++) {
int max = a[i][0];
for (int j=1; j<4; j++)
if (a[i][j] > max) max = a[i][j];
printf("Row %d max = %d\n", i, max);
}
// 矩陣轉置 (方陣原地)
for (int i=0; i
不存在真正的多維數組 — 內存是線性一維的。
int a[3][4][5]是**含 3 個元素的一維數組**,每個元素是int[4][5](即 4 行 5 列的二維數組)。
訪問 a[i][j][k] 等價 *(*(*(a+i)+j)+k),編譯器按行優先計算線性偏移。
void func(int arr[10]) { } // 等價 void func(int *arr)
void func(int arr[][4]) { } // 二維:第一維退化,第二維保留 (需知列數計算偏移)
void func(int (*arr)[4]) { } // 等價寫法:指向「含 4 個 int 的數組」的指針
// 內部 sizeof(arr) = 指針大小 (4/8),**無法獲取數組長度**
// 必須額外傳長度參數
void process(int *arr, size_t len);
-fsanitize=address、邊界斷言。int a[n]** — C99 特性,C11 可選,棧溢出風險,不可移植。**嵌入式/關鍵系統禁用**,用動態分配 malloc。sizeof(arr) 計算長度** — 退化為指針,得 4/8。**額外傳 len**。void f(int a[][]) 錯誤,必須 void f(int a[][COLS])。char s[5] = "hello"; 溢出 (需 6 字節)。={0}** — 統一清零,防未初始化讀取。size_t 或 int**,避免符號/無符號比較警告。std::array — 固定長度,值語義,可拷貝、.size()、不退化。std::vector — 動態長度、自動內存管理、豐富算法支持。std::span (C++20) — 非擁有視圖,替代指針+長度參數。數組是 C 語言最基礎的聚合類型:**連續內存、固定長度、下標訪問、參數退化指針**。掌握「定義初始化、遍歷拷貝查找、二維行優先佈局、參數必傳長度、杜絕越界/VLA」,配合 memcpy/qsort/memset 等庫函數,即能高效、安全地處理批量同類型數據。C++ 新項目優先選 std::vector/std::array 享受類型安全與 RAII。