C 和 C 中的可变长度数组 (VLA)
您询问有关 C 中可变长度数组 (VLA) 的行为和限制和 C .
本地变量长度数组范围
您的理解是准确的。在 C99 中,可以在本地范围内声明 VLA,如示例所示:
int main(int argc, char **argv) { int size = 100; int array[size]; return 0; }
全局范围内的可变长度数组
但是,VLA 确实是被禁止的在 C99 的全局范围内。具体来说:
const int global_size = 100; int global_array[global_size]; // forbidden in C99, allowed in C++
此限制的原因在于,由于 const 限定对象在 C 中不被视为整数常量表达式,因此编译器无法在编译时确定 VLA 的大小。因此,禁止在全局作用域中声明此类 VLA。
行为差异
此行为与全局和局部作用域中的数组的行为不同,因为全局数组有其大小在编译时确定,而本地范围内的 VLA 大小可以根据编译期间变量的值动态计算
C 中缺乏 VLA 支持
与 C99 不同,C 不允许使用 VLA。相反,C 提供了诸如动态内存分配以及向量和数组等容器类等功能,以满足不同的数组大小。
总之,您对 C 和 C 中 VLA 的行为和限制的理解是正确的。 VLA 在 C99 中允许出现在局部作用域中,但不允许出现在全局作用域中,并且在 C 中不受支持。这些限制源于需要在编译时确定 VLA 的大小,而这对于全局变量来说并不总是可行。
以上是C 和 C 语言的全局和局部作用域中是否允许使用可变长度数组 (VLA)?的详细内容。更多信息请关注PHP中文网其他相关文章!