示例
//开发工具:Dev-C++ 5.11 #include <stdio.h> #include <stdlib.h> #define ROWS 2 #define COLS 3 //下面两种声明形参方式等效 //int sum2d(int rows, int cols, int ar[rows][cols]); int sum2d(int, int, int ar[*][*]); int main(int argc, char *argv[]) { int junk[ROWS+1][COLS+1] = { {2, 4, 6, 8}, {3, 5, 7, 9}, {12,10,8, 6} }; /* 变长数组(VLA) */ //这里的“变”指的是:在创建数组时,可以使用变量指定数组的维度 int rs = 3; int cs = 4; /* 变长数组(variable-length array, VLA)是C99新增特性。 C11把变长数组作为一个可选特性,而不是必须强制实现的特性。 变长数组必须是自动存储类别,不能使用static或extern存储类别说明符. 不能在声明中初始化它们. const和数组大小 const int SZ = 80; double ar[SZ]; //是否允许? C90标准不允许(也可能允许)。数组的大小必须是给定的整型常量表达式, 可以整型常量组合,如20、sizeof表达式或其他不是const的内容。 由于C实现可以扩大整型常量表达式的范围,所以可能会允许使用const, 但是这种代码可能无法移植。 C99/C11标准允许在声明变长数组时使用const变量。所以该数组的定义必须在 块中的自动存储类别数组。 变长数组还允许动态内存分配,这说明可以在程序运行时指定数组的大小。普通 C数组都是静态内存分配,即可编译时确定数组的大小。由于数组大小是常量,所以 编译器在编译时就知道了。 */ int varr[rs][cs]; int i, j; for (i=0; i<rs; i++) for (j=0; j<cs; j++) varr[i][j] = i*j+j; /* end */ printf("Sum of all elements = %d\n", sum2d(rs, cs, junk)); printf("[VLA]Sum of all elements = %d\n", sum2d(rs, cs, varr)); system("pause"); return 0; } int sum2d(int rows, int cols, int ar[rows][cols]) { int r; int c; int tot = 0; for (r = 0; r < rows; r++) for (c = 0; c < COLS; c++) tot += ar[r][c]; return tot; }