以下是宣告多維陣列的例子︰
C++ 版本 | 等同的 Turbo Pascal 版本 |
int a[5][3], b [2][3][4]; | var a: array[0..4, 0..2] of integer; b: array[0..1, 0..2, 0..3] of integer; |
留意以上的宣告語句不能寫成「int a[5, 8], b[2, 3, 4]」。
對於宣告語句「int a[5][3]」,二維陣列 a 可以展示成以下的樣子︰
a |
欄 |
|||
[0] |
[1] |
[2] |
||
列 |
[0] |
a[0][0] |
a[0][1] |
a[0][2] |
[1] |
a[1][0] |
a[1][1] |
a[1][2] |
|
[2] | a[2][0] |
a[2][1] |
a[2][2] |
|
[3] |
a[3][0] |
a[3][1] |
a[3][2] |
|
[4] |
a[4][0] |
a[4][1] |
a[4][2] |
一個二維陣列可以想像為一個陣列的陣列,每一列可以想像成一個一維陣列。當以上二維陣列儲存在存貯器時,第一個元素是 a[0][0],跟著的是 a[0][1],然後是 a[0][2]、 a[1][0]、……、等等。
留意每個下標必須被一對方括號包圍著。
三維陣列、四維陣列等不能在這兒用圖表達得清楚,但引用陣列元素的方法和二維陣列相似。
以下的例子展示一個多維陣列如何被初始化︰
int n[2][3] = {{14, 23, 7}, {10, 5, 8}}; |
|
如果陣列不在被宣告時被初始化,陣列內各元素必須分開被初始化。
如果陣列元素的數目比初始值的數目多,那麼剩餘的元素的初始值會是零。例如︰
int n[2][3] = {{14, 23}, {10}}; |
|
如果陣列宣告時沒有被初始化,陣列的內容是不可預知的,直至元素被個別初始化為止。
如果初始值的數目比陣列元素的數目多,這樣會有編譯時的錯誤。
多維陣列的宣告語句中,陣列的大小不可以省略(第一層除外)。如果第一層沒有聲明,該陣列必須在宣告時初始化(使用初始值表),第一層的大小取決於初始值表,例如︰
C++ 語句 | 解釋 |
int a[][2] = {{3, 4}, {7}, {2, 3}}; | 這宣告語句是有效的,第一層的大小是 3。 |
int a[][4]; | 這宣告語句是無效的,因為陣列沒有立刻被初始化。 |
int a[3][] = {{4, 74}, {3, 2}, {1, 3}} | 這宣告語句是無效的,因為決少了第二層的大小。 |
int a[][] = {{4, 7}, {3, 2}, {1,3}} | 如上。 |
以下程序使用了一個兩維陣列︰
C++ 版本 | Pascal 版本 |
#include <iostream.h> main() { int table[10][10], i, j; for (i = 0; i < 10; i++) for (j = 0; j < 10; j++) table[i][j] = i * j; cout << " |"; for (i = 0; i < 10; i++) cout << " " << i << "|"; cout << endl; for (i = 1; i <= 11; i++) cout << "--+"; cout << endl; for (i = 0; i < 10; i++) { cout << " " << i << "|"; for (j = 0; j < 10; j++) { if (table[i][j] < 10) cout << " "; cout << table[i][j] << " "; } cout << endl; } return 0; } |
program prog_26(input, output); var table: array[0..9, 0..9] of integer; i, j: integer; begin for i := 0 to 9 do for j := 0 to 9 do table[i, j] := i * j; write(' |'); for i := 0 to 9 do write(' ', i, '|'); writeln; for i := 1 to 11 do write('--+'); writeln; for i := 0 to 9 do begin write(' ', i, '|'); for j := 0 to 9 do begin if table[i, j] < 10 then write(' '); write(table[i, j], ' ') end; writeln end end. |
輸出範例︰ | |
| 0| 1| 2| 3| 4| 5| 6| 7|
8| 9| --+--+--+--+--+--+--+--+--+--+--+ 0| 0 0 0 0 0 0 0 0 0 0 1| 0 1 2 3 4 5 6 7 8 9 2| 0 2 4 6 8 10 12 14 16 18 3| 0 3 6 9 12 15 18 21 24 27 4| 0 4 8 12 16 20 24 28 32 36 5| 0 5 10 15 20 25 30 35 40 45 6| 0 6 12 18 24 30 36 42 48 54 7| 0 7 14 21 28 35 42 49 56 63 8| 0 8 16 24 32 40 48 56 64 72 9| 0 9 18 27 36 45 54 63 72 81 |