二維陣列的宣告與使用

◎ 概念:如果要大量儲存同一種型態、而且彼此又有密切關係的「表格式」資料,例如數學中的矩陣,這時候就應將其宣告並設定為「二維陣列」。

◎ 語法範例:

(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]這個字元的記憶體位址,這在以後
     講到『指標』這個單元時,還會再詳細說明。