二維陣列的宣告與使用
◎ 概念:如果要大量儲存同一種型態、而且彼此又有密切關係的「表格式」資料,例如數學中的矩陣,這時候就應將其宣告並設定為「二維陣列」。
◎ 語法範例:
(1) int a[50][3];
// 宣告整數二維陣列a,其內容可以看成是一個棋盤表格,共有50列(橫排),每列3個元素;
例如要儲存50位同學的三科成績,就可以這樣宣告。其中第1位同學的第1科成績是
a[0][0],第5位同學的第3科成績是a[4][2],餘類推。(※記得陣列的起始元素要從0開始)
(2) int a[3][4] = {{2, 5, 7, 1}, {9, 4, 3, 15}, {6, 10, 8, 5}}; // 在宣告二維陣列時,可以同時設定初值
(3) int a[3][4] = {0}; // 這是特別的初值設定法,會把二維陣列中每個元素都設為0
(4) char a[3][5] = {{'B', 'o', 'o', 'k', '\0'}, {'D', 'o',
'g', '\0', '\0'}, {'F', 'i', 's', 'h', '\0'}}; //
這是字元型態的二維陣列宣告與
初值設定,請注意字元
'\0'
(5) char a[3][5] = {"Book", "Dog", "Fish"};
// 這個陣列宣告方式基本上與上例(4)相同,其概念是用「字串」去包
含「字元」,寫法要簡潔的多。但使用時要記得每個字串後面都有
一個隱藏的結束字元 '\0'
◎ 二維字元陣列與字串陣列的應用方法:
一般在字串資料的應用上,常常會使用到字串陣列,例如要將星期日至星期六的英文單字建立成陣列,則我們常會使用下列的宣告方式:
char
week[7][10] = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY",
"SATURDAY"};
這種宣告就是所謂的字串陣列,而結構上是屬於二維字元陣列,其實際的資料內容可以用下面表格來表示:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
0 | S | U | N | D | A | Y | \0 | ? | ? | ? |
1 | M | O | N | D | A | Y | \0 | ? | ? | ? |
2 | T | U | E | S | D | A | Y | \0 | ? | ? |
3 | W | E | D | N | E | S | D | A | Y | \0 |
4 | T | H | U | R | S | D | A | Y | \0 | ? |
5 | F | R | I | D | A | Y | \0 | ? | ? | ? |
6 | S | A | T | U | R | D | A | Y | \0 | ? |
當我們作了這樣的宣告之後,後續的應用就有一些值得注意的地方:
(1)
week[x][y]這樣的寫法代表「字元」。例如
putchar(week[0][1])會印出字元 'U',putchar(week[2][3])會印出
字元 'S', week[3][0] = 'P' 會把該位置的內容從 'W' 改成 'P'。
(2)
week[x]這樣的寫法代表「字串」。例如
puts(week[0])會印出字串"SUNDAY",puts(week[1])會印出字串
"MONDAY"。其實講的更專業一點,week[x]所表示的是week[x][0]這個字元的記憶體位址,這在以後
講到『指標』這個單元時,還會再詳細說明。