变长数组不能改变大小
变长数组中的变不是可以修改已创建数组的大小,一旦创建了变长的数组,它的大小则保持不变,这里的编制的是,在创建数组是,可以使用变量指定数组的维度
以下的列子计算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和数组的大小