变长数组不能改变大小
变长数组中的变不是可以修改已创建数组的大小,一旦创建了变长的数组,它的大小则保持不变,这里的编制的是,在创建数组是,可以使用变量指定数组的维度
以下的列子计算int类型的二维数组的所有元素之和
首先要申明一个带二维边长数组参数的函数
int sum2d(int rows,int cols,int ar[rows][cols]); //ar是一个变长数组VLA
注意前面两个形参(rows和cols)用作第三个形参二维数组ar的两个维度。因为ar的声明要使用rows 和cols,所以在形参列表中必须声明ar之前先声明这两个形参。
C99/C11标准规定,可以省略原型中的形参名,但是在这种情况下,必须用星号来带一省略的维度;
int sum2d(int ,int ,int ar[*][*]); //ar是一个变长数组,省略了维度形参名
//vararr2d.c--使用变长数组的函数 #include <stdio.h> #define ROWS 3 #define COLS 4 int sum2d(int rows, int cols, int ar[rows][cols); int mian(void) { int i, j; int rs = 3; int cs = 10; int junk[ROWS][COLS] = { {2,4,6,8}, {3,5,7,9}, {12,10,8,6} }; int morejunk[ROWS - 1][CLOS + 2] = { {20,30,40,50,60,70}, {5,6,7,8,9,10} }; int varr[rs][cs]; //变长数组 for (i = 0; i < rs; i++) for (j = 0; j < cs; j++) varr[i][j] = i*j + j; printf("3x5 array\n"); printf("sum of all elements=%d\n", sum2d(ROWS, COLS, junk)); printf("2x6 array\n"); printf("sum of all element =%d\n", sum2d(ROWS - 1, COLS + 2, morejunk)); printf("3x10 VLA\n"); printf("sum of all elements=%d\n", sum2d(rs, cs, varr)); return o;
} //带变长数组形参函数 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; } const和数组的大小