1. 程式人生 > >C二維陣列行為空,列不為空

C二維陣列行為空,列不為空

二維陣列:

處理二維陣列得函式有一處可能不太容易理解:陣列的行可以在函式呼叫時傳遞,但是陣列的列卻只能被預置在函式內部。

eg:

 1 #define COLS 4
 2 int sum(int ar[][COLS],int rows){
 3     int r ;
 4     int c;
 5     int tot=0;
 6     for(r=0;r<rows;r++)
 7         for(c=0;c<CLOS;c++)
 8             tot+=ar[r][c];
 9             return tot;
10 }

:系統可以根據初始化的資料個數和第2維的長度可以確定第一維的長度。

eg:    int a[ ][3]={ 1,2,3,4,5,6};

陣列的第一維的定義被省略,初始化資料共6個,第二維的長度為3,即每行3個數,所以a陣列的第一維是2。

一般,省略第一維的定義時,第一維的大小按如下規則確定:初值個數能被第二維整除,所得的商就是第一維的大小;若不能整除,則第一維的大小為商再加1。

 


 

 

變長陣列:變長陣列必須是自動儲存類的,這意味著它們必須在函式內部或作為函式參量宣告,而且宣告時不可以進行初始化。

注意:“變”並不表示在建立陣列後,可以修改其大小。變長陣列的大小在建立後就是保持不變的。“變”,是指其維度大小可以用變數來指定。

 

程式碼宣告規範:

      int sum2d(int rows,int cols,int ar[rows][cols])//正確

      int sum2d(int ar[rows][cols],int rows,int cols)//順序不正確,因為ar的宣告中使用了rows cols,所以在參量列表中,他們兩個宣告需要早於ar.

      int sum2d(int ,int ,int ar[*][*]);//正確  省略了維數引數的名稱