变长数组

变长数组不能改变大小

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

以下的列子计算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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值