长度可变数组


You
You 2023-12-31 02:30:54 50771 赞同 0 反对 0
分类: 资源
如果一个数组具有动态存储周期(也就是说,如果在语句块内定义数组,并且没有 static 修饰符),那么 C99 也允许把非常量表达式作为元素数量来定义该数组。这样的数组被称为长度可变数组(variable-length array)。

长度可变数组

如果一个数组具有动态存储周期(也就是说,如果在语句块内定义数组,并且没有 static 修饰符),那么 C99 也允许把非常量表达式作为元素数量来定义该数组。这样的数组被称为长度可变数组(variable-length array)。

而且,长度可变数组的名称必须是普通的标识符。长度可变数组不能作为结构或联合的成员。在下面的示例中,只有 vla 数组的定义是合法的:

  1. void func( int n )
  2. {
  3. int vla[2*n]; // 合法:存储周期为动态的
  4. static int e[n]; // 非法:长度可变数组不可有静态存储周期
  5. struct S { int f[n]; }; // 非法:f不是一个普通标识符
  6. /* ... */
  7. }


与其他动态变量一样,每次程序流进入包含长度可变数组定义的语句块时,都会重新创建这个长度可变数组。因此,在每次实例化时,数组都可以有不同的长度。然而,一旦被创建,即便是长度可变数组,在它的当前存储周期内也不能改变数组长度。

动态对象被存储在栈中,当程序流离开对象所在的语句块时,动态对象的空间就会被释放。因此,只有对小的、临时的数组,定义长度可变数组才比较合理。如想动态地创建大型数组,通常应该使用标准函数 malloc()和 calloc()来显式地分配内存空间。

这种数组的存储周期会持续到程序结束,也可以调用函数 free()来主动地释放被占用的内存空间。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
YouL0
粉丝 0 资源 386 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  127
统信桌面专业版【全盘安装UOS系统】介绍  122
银河麒麟桌面操作系统安装佳能打印机驱动方法  114
银河麒麟桌面操作系统 V10-SP1用户密码修改  105
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益209.03元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!