5.1 一維陣列
陣列(Array)的結構
陣列這種資料結構是用來儲存許多相同型別的資料用的。如果我們把變數想像成是一個可以放東西的箱子,那麼陣列就是一堆箱子的集合,而且每個箱子都有一個連續編號的索引值(index)。
例如:我們要儲存 10 個學生的成績(都是整數),我們可以使用這樣一個內含 10 個元素(element)/項目(item)的陣列。

宣告陣列
在程式中我們可以這樣宣告這個陣列 score。
int score[10];
其語法為
型別 陣列名稱[元素數量];
其中陣列名稱的命名規則與一般變數的命名規則相同。
要特別注意的是,陣列的索引值是由 0 開紿,所以宣告大小為 10 的陣列 score。可以使用的元素是 score[0]~score[9]。
給定初值
如同變數可以在宣告同時給定初值,陣列也可以。
如果只宣告,但不給定初值,則陣列內各元素的值會無法預測(會是分配到的記憶體當下的值)。
int a[5] = {1, 3, 5, 7, 9};
for(int i=0; i<5; i++)
{
cout << a[i] << " ";
}
1 3 5 7 9
初值不給足
如果陣列有 5 個元素,但是初值只給 2 個,剩下 3 個的值。
int a[5] = {1, 3};
for(int i=0; i<5; i++)
{
cout << a[i] << " ";
}
1 3 0 0 0
觀察執行結果,可以發現它們被設為 0。
所以對於整數陣列,我們常用這樣的技巧來宣告並指定其初值皆為 0。
int a[5] = {0};
for(int i=0; i<5; i++)
{
cout << a[i] << " ";
}
0 0 0 0 0
存取陣列中指定元素的值
原則上存取陣列 a 裡索引為 i 的元素值,和一般變數一樣,只要用 a[i] 來表示要存取的元素即可。
練習:讀取學生成績,並接受查詢
讀取使用者輸入的 1~10 號學生成績,並接受以座號查詢其成績。輸入 -1 結束程式。
int score[10] = {0};
for(int i=0; i<10; i++)
{
cin >> score[i];
}
while(true)
{
cout << "輸入座號查詢成績: ";
int id;
cin >> id;
if(id==-1)
break;
cout << id << " 號的成績為 " << score[id-1] << endl; // 想一想,為什麼索引值是 id-1,而不是 id?
}
因為陣列的索引值是由 0 開始編號,和我們一般生活中由 1 開紿編號的情境不同。所以也有人會選擇「浪費一個元素」來讓程式寫起來比較直覺。
int score[11] = {0}; // 宣告 11 個,索引 0 那個不用
for(int i=1; i<=10; i++) // i 由 1~10,而不是 0~9
{
cin >> score[i];
}
while(true)
{
cout << "輸入座號查詢成績: ";
int id;
cin >> id;
if(id==-1)
break;
cout << id << " 號的成績為 " << score[id] << endl; // id 不用減 1 了
}
陣列大小在宣告後無法改變
陣列大小在宣告後無法改變,所以通常我們會宣告「足夠」的大小。例如:在班級成績儲存時,若班級人數不超過 50 人,我們會宣告大小為 50 的陣列。