C/C++之变长数组(VLA)和可伸缩型数组成员

数组主要用来处理一系列同类型的数据集合,在C/C++中应用十分广泛。其中有两种特殊的数组,变长数组(VLA)和可伸缩型数组成员,应用得当的话,会非常方便。
##变长数组(VLA)
在多维数组中,数组的行可以在函数调用时传递,但是数组的列一般在函数内部定义。
如下所示:

#define COLS 4
int sum2dim ( int a[][COLS],int rows ) {
	int r;
	int c
	int tol=0;

	for (r=0; c<rows; r++)
		for (c=0; c<COLS; c++)
			tol+=ar[r][c];
	return tol;
}

这种函数只能处理固定列的数组,要想处理任意行、任意列的数组,就需要用到变长数组(VLA)。但是变长数组必须在函数内部或者作为函数参数使用,它的维数大小都可以用变量来表示。

函数的定义如下:

#define COLS 4
int sum2dim ( int rows, int cols, int a[rows][cols] ) {
	int r;
	int c
	int tol=0;

	for (r=0; c<rows; r++)
		for (c=0; c<cols; c++)
			tol+=ar[r][c];
	return tol;
}

##可伸缩型数组成员

可伸缩型数组成员在声明时不会分配内存空间,也不能直接使用。
声明规则:

  • 伸缩型数组成员必须是最后一个数组成员
  • 机构中必须至少有一个其他成员
  • 声明格式和普通数组一样,除了它的方括号内是空的
struct flex
{
	int count;
	double ave;
	double sco[];
}

使用格式:

struct flex *pf
pf= malloc (sizeof( struct flex) + 5 * sizeof( double);
pf -> count = 5;
pf -> sco[2]=18.5;
for (i=0;i < 5; i++)
{
	pf -> sco[i] = 20.0-i;
}

用指针来访问伸缩型数组和普通数组一样。

变长数组和伸缩型数组成员都是在调用的时候确定数组的大小,分配空间,可以节省内存。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值