具有相同的性質的東西把它集合放在一起,叫做「陣列/數組」,用 []
來表示
一個陣列和一個變數一樣,有 類型 tpye、名稱 Array Name、值 Value 、資料長度 length 等屬性,但陣列還多了一種屬性 - 位址,它是有續性的,稱為「index」索引 (計概中,也稱為「註標」),從 0 開始
圖片來源
在程式語言裡陣列的「邏輯順序」和「實體順序」是一樣的,在記憶體中,也是從 0, 1, 2... 由小到大排列。這樣的儲存方式是為了讓電腦可以很快的找出某一個 index 在記憶體中的位址,index的意義,是指相對於陣列中第一個元素的「位移量」,例如:指定存取 Array 中的第 4 個元素 = 指定存取 Array 中的第 1 個元素四個位移量的記憶體空間
那如果今天是「多維陣列」(Multidimensional Array)要怎麼辦?
「多維陣列」就是陣列裡又包了陣列,像是二維陣列(2D Array/Two Dimensional Array)、三維陣列(Three-Dimensional Array)、N維陣列等,取值的方式,一維陣列使用一個 index 來選取某個特定的陣列元素;二維陣列則使用兩個索引值來指定某個特定的陣列元素,以 C 語言為例
// 一維陣列及其取值方式
int oneDimArray[5] = {1, 2, 3, 4, 5};
int value = oneDimArray[1];
// 二維陣列及其取值方式
int twoDimArray[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 第一個 index 是用來指定存取哪一「列」,第二個是用來指定存取哪一「行」(直行橫列)
int value = twoDimArray[1][2];
通常系統在記憶體裡紀錄多維陣列位址的方法,是先把第一列的所有資料「連續」記錄在記憶體裡,接著紀錄第二列...以此類推,像是上方例子中的這個宣告 int twoDimArray[3][4]
,代表會配置 3 * 4 = 12 個整數的記憶體空間給此陣列使用。考試中有可能會問你某註標在記憶體中的哪裡,有公式可以直接套用,但非本文所要談論的範圍,如果不是要考試,有個基本概念就足夠惹~
在 C 語言裡,陣列會先存放好第一「列」的資料,接著第二列...子此類推,這樣的方式叫做「以列為主」(Row Major),有的程式語言是「以欄為主」(Column Major),這兩種方式的記憶體儲存位址會不太一樣,以下方這個 4(列)X 3(欄) 的二維陣列來舉例:
「以列為主」的記憶體排序
「以欄為主」的記憶體排序
「陣列」有以下特點: