二維數組:
處理二維數組得函數有一處可能不太容易理解:數組的行可以在函數調用時傳遞,但是數組的列卻只能被預置在函數內部。
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[*][*]);//正確 省略了維數參數的名稱