二维数组:
处理二维数组得函数有一处可能不太容易理解:数组的行可以在函数调用时传递,但是数组的列却只能被预置在函数内部。
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[*][*]);//正确 省略了维数参数的名称