可变长度数组

可变长度数组 ( C99 功能部件) 是一个自动存储器持续时间数组,其长度在运行时确定。 仅限 C + + XL C/C++ 编译器支持此功能,作为 扩展。 IBM 仅限 C + +

可变长度数组声明符语法

读取语法图跳过可视语法图数组标识[ 表达式类型限定符* ]

如果数组的大小由 * 而不是表达式指示,那么会将变长数组视为未指定的大小。 此类数组被视为完整类型,但只能在函数原型作用域的声明中使用。

可变长度数组和指向可变长度数组的指针被视为 可变修改类型。 可变修改类型的声明必须位于块作用域或函数原型作用域。 使用 extern 存储类说明符声明的数组对象不能为可变长度数组类型。 使用 static 存储类说明符声明的数组对象可以是指向可变长度数组的指针,但不能是实际的可变长度数组。 无法初始化可变长度数组。

注意: 仅限 C + + 在C++应用程序中,为可变长度数组分配的存储空间在它们所在的函数执行完毕之前不会被释放。 仅限 C + +

可变长度数组可以是 sizeof 表达式的操作数。 在这种情况下,操作数在运行时求值,大小既不是整数常量,也不是常量表达式,即使变量数组的每个实例的大小在其生存期内没有变化。

可变长度数组可以在 typedef 语句中使用。 typedef 名称将仅具有块作用域。 在定义 typedef 名称时,数组的长度是固定的,而不是每次使用它时。

函数参数可以是可变长度数组。 必须在函数定义中提供必需的大小表达式。 编译器对函数条目上可变修改的参数的大小表达式进行求值。 对于以可变长度数组作为参数声明的函数,如下所示:
void f(int x, int a[][x]);
可变长度数组自变量的大小必须与函数定义的大小相匹配。

IBM 扩展仅限 C + +C++扩展不支持对可变长度数组类型的引用;函数参数也不可能是可变长度数组类型的引用。 仅限 C + +IBM 扩展