6.1 一維陣列:宣告與使用
陣列就像「編號的盒子」。一個陣列名稱 a 代表一整列盒子,每個盒子用數字編號,你可以用 a[編號] 取得或修改裡面的值。
陣列的宣告格式:
資料型態 陣列名稱[大小];
例如:
int a[5]; // 宣告一個能儲存 5 個 int 的陣列
關鍵規則:
- 陣列名稱命名:和變數一樣,用字母/數字/底線組成,首字不能是數字
- 大小必須是常數:不能用變數。
int a[n];✗、int a[5];✓ - 索引從 0 開始:
a[5]有 5 個元素:a[0], a[1], a[2], a[3], a[4]a[5]不存在,會造成越界存取(undefined behavior)
- 用運算式當索引:
a[2*3]等於a[6]、a[i+1]等
¶範例程式碼
#include<iostream>
using namespace std;
int main() {
// 宣告一個大小為 5 的 int 陣列
int a[5];
// 用亂序順序指派數值,索引值 i 的元素被設為 i+1
a[3] = 4;
a[0] = 1;
a[2] = 3;
a[4] = 5;
a[1] = 2;
// 用索引值存取和輸出
cout << a[2] << '\n'; // 輸出 3
cout << a[2 * 2 - 1] << '\n'; // 2*2-1=3,輸出 a[3]=4
cout << a[a[0]] << '\n'; // a[0]=1,輸出 a[1]=2
return 0;
}
執行結果:
3
4
2
¶陣列的排版
陣列雖然沒有大括號區塊,但存取和初始化也有幾個好讀的小習慣:
// ✓ 好的排版
int a[5] = {1, 2, 3, 4, 5};
cout << a[i] << " " << a[i + 1];
// ✗ 不好的排版
int a[5]={1,2,3,4,5};
cout << a[ i ] << " " << a[i+1];
| 規則 | ✓ 好的做法 | ✗ 不好的做法 | 為什麼 |
|---|---|---|---|
| 中括號內不加空格 | a[i] |
a[ i ] |
索引緊貼中括號,就像數學的下標 |
| 初始化逗號後空格 | {1, 2, 3} |
{1,2,3} |
和宣告 int a, b, c; 一致(1.5 提過) |
| 索引運算式加空格 | a[i + 1]、a[n - 1] |
a[i+1] |
運算子周圍加空格,長一點的索引也看得清楚 |
(多維陣列寫成 a[i][j],中括號之間同樣不加空格。)
動手試試看:把程式碼中的 a[2*2-1] 改成 a[2*3](即訪問 a[6]),看看會發生什麼。想想看為什麼會出問題?