变长数组——VLA

背景

比如我们需要调用函数计算几个数组的所有数据的总和,如数组a[5][2]、b[3][2]、c[7][2]

int sum(int a[][2],int row);

函数原型就可以这样来定义(省略第一位的数字是允许的,毕竟可以当成指针处理。)然后附上行数即可。

但是我们难免需要计算不同列数的数组,即不同大小的数组,那么函数的定义就会很难处理,所以我们有了变长数组的概念。

变长数组

这里指的并不是将一个定义好的数组的长度改变了,如将a[4][3]改成a[3][4],而是不限定数组的长宽,用变量来指定维度。

首先该标准是在C99首先提出,在C11中作为一个可选特性,所以并不是所有的编译器都完全支持

在主函数的变长数组

int r_num;
int c_num;
scanf("%d %d",&r_num,&c_num);
int a[r_num][c_num];//创建变长数组

在函数中调用变长数组

int sum(int r_num, int c_num, int a[r_num][c_num]);
//要是希望在函数原型中省略变量名称:
int sum(int ,int , int a[*][*]);

要注意的是这两种情况都是先有两个参数然后才有变长数组的,函数中就是先声明两个变量。

数组大小的其他情况

C90的时候,const关键字定义的变量是不允许作为数组的大小参数,而在C99中加以允许。

另外数组的大小可以是常量或者表达式,如int a[sizeof(int)*10];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值