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[*][*]);//正确 省略了维数参数的名称