变长数组

    xiaoxiao2022-07-06  194

    变长数组不能改变大小

    变长数组中的变不是可以修改已创建数组的大小,一旦创建了变长的数组,它的大小则保持不变,这里的编制的是,在创建数组是,可以使用变量指定数组的维度

    以下的列子计算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和数组的大小

     

    最新回复(0)