二维数组:
处理二维数组得函数有一处可能不太容易理解: 数组的行可以在函数调用时传递, 但是数组的列却只能被预置在函数内部.
- eg:
- #define COLS 4
- int sum(int ar[][COLS],int rows){
- int r ;
- int c;
- int tot=0;
- for(r=0;r<rows;r++)
- for(c=0;c<CLOS;c++)
- tot+=ar[r][c];
- return tot;
- }
: 系统可以根据初始化的数据个数和第 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[*][*]);// 正确 省略了维数参数的名称
来源: http://www.bubuko.com/infodetail-2833420.html