1. 前言
C 語言中陣列的初始化是程式設計的第一步,同時也是非常重要的環節。如果沒有正確初始化,很容易導致預期外的 bug 或錯誤。本文將針對初學者到中階使用者,分步說明陣列的初始化方式,並提供實用小提示,幫助你更上一層樓,成為陣列初始化的高手!
2. 什麼是陣列?C 語言中的角色
陣列是一種可以一次處理多個相同資料型態數值的方便結構。例如,若要存放 30 位同學的考試分數,使用陣列會比一個個宣告變數來得高效得多。
範例:陣列宣告
int scores[30];
這段程式碼就建立了一個可以存放 30 筆分數的陣列。
使用陣列時要注意,未初始化的陣列裡可能包含不確定的資料。因此,正確的初始化非常重要。

3. 基本的陣列初始化方法
宣告陣列的同時也可以直接初始化,這有助於在程式執行時預先設定好所需資料。
範例1:宣告時直接初始化
int arr[3] = {1, 2, 3};
這段程式碼宣告了一個有三個元素的陣列 arr
,並為每個元素分別指定值。在 C 語言中,有時可以省略陣列大小,編譯器會自動依據初始值推斷大小。
範例2:省略大小的初始化
int arr[] = {1, 2, 3};
這種寫法下,陣列的大小會根據初始值的個數自動推斷。
小提示:
有時候明確寫出陣列大小會更清楚,但省略大小也能讓程式更簡潔、更容易閱讀。
4. 部分初始化
若只針對部分元素初始化,未指定的元素會自動設為 0。這在只需要為部分元素指定值時特別有用。
範例:部分初始化
int arr[5] = {1, 2}; // 剩下的元素自動為 0
這裡,前兩個元素分別被初始化為 1
和 2
,其他元素則自動設為 0
。這種方式對於大型陣列或僅需設定部分初始值時很方便。

5. 全部元素設為零
若要將所有元素初始化為 0,可以這樣簡潔地寫:
範例:全部設為 0 的初始化
int arr[5] = {0}; // 所有元素都會是 0
這種寫法對於需要全部清零的大型陣列非常實用。如果是大量元素的情況,也可以用 memset
函數來快速初始化。
範例:使用 memset
清零
memset(arr, 0, sizeof(arr));
用 memset
可以快速地將大陣列全部初始化為 0。
6. 多維陣列的初始化
C 語言也能輕鬆處理二維、三維等多維陣列,這對於處理矩陣或複雜資料集很有幫助。
範例:二維陣列初始化
int arr[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
這裡宣告了一個 2 行 3 列的陣列,並為每一行指定初始值。
範例:三維陣列初始化
int tensor[2][2][2] = {
{{1, 2}, {3, 4}},
{{5, 6}, {7, 8}}
};
這是個 2x2x2 的三維陣列,每個元素都有初始值。使用多維陣列時,請留意陣列大小與初始值的對應順序。

7. 動態陣列初始化
如果陣列大小在執行時才決定,可以用 malloc
動態配置記憶體。這對於大小不固定的情境非常有用。
範例:動態陣列初始化
int *arr = (int *)malloc(5 * sizeof(int));
for (int i = 0; i < 5; i++) {
arr[i] = i;
}
這個例子用 malloc
配置了記憶體,並用迴圈給每個元素賦值。
避免記憶體洩漏:
動態分配的記憶體,用完後一定要記得用 free
釋放,否則會產生記憶體洩漏,浪費系統資源。
free(arr);
加入錯誤處理:
建議在動態記憶體分配時,也檢查是否分配成功。
if (arr == NULL) {
printf(“記憶體分配失敗。
“);
}
8. 常見錯誤與最佳實踐
未初始化陣列的風險:
C 語言宣告陣列時,不會自動初始化。若使用未初始化的陣列,可能殘留不確定的資料,造成不可預期的 bug。請務必主動初始化。
用 #define
管理大小:
利用 #define
巨集管理陣列大小,有助於未來維護及修改。
define SIZE 5
int arr[SIZE];
9. 結論
陣列初始化是 C 語言程式設計的基本功,做好可以大幅提升程式穩定性。本文介紹的各種技巧,如零初始化、部分初始化、多維陣列、動態記憶體管理等,都能幫助你避免 bug,寫出更有效率的程式。請善用這些知識,挑戰更進階的專案吧!