1. 程式人生 > >為什麼多維陣列必須宣告列數,而對行數沒有要求???

為什麼多維陣列必須宣告列數,而對行數沒有要求???

 int  (*array)[10];// 我們和上面比較來看,發現 *array 就相當於 array。也就是說該宣告形式仍然表示一個一維陣列,數組裡面儲存了10int型的變數,陣列的名字叫 *array. 再根據指標的意義,*array實際是取array 所指向的內容,而array 正好是陣列的名字,這就好比 int a[10];  *a 是一樣的。*a表示取出陣列第一個元素的內容,*(a+1)表示陣列第二個元素的內容。。。。因此,這裡的*array也就是陣列array的第一個元素的內容了。由於在int a [10] 中,元素是int型的,因此編譯器知道 a+1 實際是移動32位,即4個位元組(假設該機器用4個位元組表示一個int 型別)。 對於
*array ,它的元素不是簡單的int,它的每一個元素是一個包含10int型元素的陣列,因此。如果執行 array+1; 則會移動 10*32 = 320 位,也就是需要移動10*4=40個位元組(一個int 佔用4個位元組,每個元素裡面包含10int )。這也就解釋了為什麼宣告多維陣列的時候對行數沒有要求,但是必須宣告列數。因為如果不宣告列數,當執行array + 1;這樣的操作的時候,陣列不知道指標該移動多少位。為了讓指標知道自己應該移動多少位,就必須把列數說明清楚。實際上列數的作用就相當於簡單型別中的機器結構的作用,一個機器中int 型別使用幾個位元組,佔用多少位,都是機器規定好的,即機器的結構決定了在執行比如
int a[10]; a++ // 這樣的操作的時候,指標一次該移動幾個位元組。但是對於多維陣列,機器結構中是沒有的,必須由程式設計師顯示的告訴機器你現在創造的這個新的“元素型別”在我的機器裡面佔用多少個位元組,否則我不知道該怎麼移動。