陣列是 **相同型別、固定長度、索引存取** 的資料結構。本單元建立陣列核心觀念:型別分類、宣告語法、預設值、參考型別語意、多維與交錯陣列區別。
Length,不可變0 ~ Length-1,O(1) 隨機存取| 語法 | 範例 | 說明 |
|---|---|---|
| 宣告+初始化 | int[] a = {1,2,3}; | 編譯器推斷長度 |
| new + 初始化 | int[] a = new int[] {1,2,3}; | 明確 new,長度可省略 |
| new 指定長度 | int[] a = new int[5]; | 元素自動填預設值 (0) |
| 分步宣告 | int[] a; a = new int[3]{1,2,3}; | 分離宣告與配置 |
⚠️ int[] a = {{1,2},{3,4}}; ❌ 錯誤,這是二維陣列語法。
| 型別分類 | 預設值 |
|---|---|
| 數值型別 (int, double, ...) | 0 |
| 布林 | false |
| 字元 | '\0' |
| 參考型別 (string, class, 陣列...) | null |
| 結構體 | 所有欄位遞歸預設值 |
C# 多維陣列 **所有維度寫在一組方括號內,逗號分隔**:
// 二維:3列 2行
int[,] matrix = new int[,] { {1,2}, {3,4}, {5,6} };
// 三維:2x2x2
int[,,] cube = new int[,,] { { {1,2}, {3,4} }, { {5,6}, {7,8} } };
索引存取:matrix[0,1] → 2 (第 0 列、第 1 行)
| 維度 | 現實比喻 | 索引範例 |
|---|---|---|
| 一維 | 班級清單 | score[1] → 2 號學生成績 |
| 二維 | 多班級成績表 | score[0,2] → 0 班 2 號 |
| 三維 | 多學校多班級 | score[1,2,3] → 1 校 2 班 3 號 |
| N 維 | 擴展空間定位 | 遊戲座標、科學計算 |
int[] a = {1,2,3};
int[] b = a; // b 指向 a 同一記憶體
b[0] = 7;
Console.WriteLine(a[0]); // 7 ← a 也被改變!
// 若需獨立副本
int[] c = new int[3];
Array.Copy(a, c, 3); // 或 a.CopyTo(c, 0)
c[0] = 9; // a 不受影響
💡 **口訣**:new 才在 Heap 開新空間;單純指派只是複製參考。
int[][] jagged = new int[3][]; — 外層固定 3 行,內層各行長度可不同。詳細宣告與遍歷見 下一單元。
IndexOutOfRangeException(編譯期靜態分析可攔截常數索引越界)。new int[3,4](矩形),new int[3][](交錯)。Length 為總元素數,多維單一維度用 GetLength(d)。new int[5] 自動產生五個 0。下一單元將深入 Length 屬性、foreach 遍歷、交錯陣列完整操作。