背景
比如我们需要调用函数计算几个数组的所有数据的总和,如数组a[5][2]、b[3][2]、c[7][2]
int sum(int a[][2],int row);
函数原型就可以这样来定义(省略第一位的数字是允许的,毕竟可以当成指针处理。)然后附上行数即可。
但是我们难免需要计算不同列数的数组,即不同大小的数组,那么函数的定义就会很难处理,所以我们有了变长数组的概念。
变长数组
这里指的并不是将一个定义好的数组的长度改变了,如将a[4][3]改成a[3][4],而是不限定数组的长宽,用变量来指定维度。
首先该标准是在C99首先提出,在C11中作为一个可选特性,所以并不是所有的编译器都完全支持
在主函数的变长数组
int r_num;
int c_num;
scanf("%d %d",&r_num,&c_num);
int a[r_num][c_num];//创建变长数组
在函数中调用变长数组
int sum(int r_num, int c_num, int a[r_num][c_num]);
//要是希望在函数原型中省略变量名称:
int sum(int ,int , int a[*][*]);
要注意的是这两种情况都是先有两个参数然后才有变长数组的,函数中就是先声明两个变量。
数组大小的其他情况
C90的时候,const关键字定义的变量是不允许作为数组的大小参数,而在C99中加以允许。
另外数组的大小可以是常量或者表达式,如int a[sizeof(int)*10];