如果一个数组具有动态存储周期(也就是说,如果在语句块内定义数组,并且没有 static 修饰符),那么 C99 也允许把非常量表达式作为元素数量来定义该数组。这样的数组被称为长度可变数组(variable-length array)。
而且,长度可变数组的名称必须是普通的标识符。长度可变数组不能作为结构或联合的成员。在下面的示例中,只有 vla 数组的定义是合法的:
与其他动态变量一样,每次程序流进入包含长度可变数组定义的语句块时,都会重新创建这个长度可变数组。因此,在每次实例化时,数组都可以有不同的长度。然而,一旦被创建,即便是长度可变数组,在它的当前存储周期内也不能改变数组长度。
动态对象被存储在栈中,当程序流离开对象所在的语句块时,动态对象的空间就会被释放。因此,只有对小的、临时的数组,定义长度可变数组才比较合理。如想动态地创建大型数组,通常应该使用标准函数 malloc()和 calloc()来显式地分配内存空间。
这种数组的存储周期会持续到程序结束,也可以调用函数 free()来主动地释放被占用的内存空间。
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!