我可以使用变量来声明数组的大小吗?C

我可以使用变量来声明数组的大小吗?C,c,arrays,C,Arrays,我可以这样做吗?我认为你可以,因为它是有效的,但我不确定它是否100%正确 printf("Array size: "); scanf("%d", &n); int array[n]; // I know this only works with C99 是的,它在C-99和其他类似C的语言中工作++ printf("Array size: "); scanf("%d", &n); int array[n]; 可变长度数组严格来说是C99的一个特性。像GCC和Clang这样的

我可以这样做吗?我认为你可以,因为它是有效的,但我不确定它是否100%正确

printf("Array size: ");
scanf("%d", &n);
int array[n]; // I know this only works with C99

是的,它在C-99和其他类似C的语言中工作++

printf("Array size: ");
scanf("%d", &n);
int array[n];

可变长度数组严格来说是C99的一个特性。像GCC和Clang这样的编译器允许它们在C90(ANSI和C89)模式以及C++中使用。例如,请参见和。这两个编译器都有警告或扩展,在使用VLA时可能会提供或限制某些功能。特定于GCC的扩展的一个示例是以下代码,这些代码不以Clang格式编译:

void tester (int len; char data[len][len], int len)
{
}
在这两种编译器中,
-pedantic
将在VLA为非标准的标准模式下发出使用警告

在C11中,对可变长度数组的支持是可选的。C11标准指定了一个“功能测试”宏,说明实现是否支持它们

§6.7.6.2[…](可变长度数组是一种有条件的功能 实施不需要支持;请参见6.10.8.3。)

§6.10.8.3 u_STDC_NO_VLA_u_u u-整数常数1,用于 指示实现不支持可变长度 数组或可变修改的类型


在C99中-是。它被称为VLA(可变长度数组)。。。等等,你说你已经知道。。。那么问题是什么呢???重要的警告:VLA依赖于自动存储(通常作为堆栈实现),因此所有限制都适用。也就是说,仅适用于较小的大小,并且无法返回指向它的指针。在构造VLA或
malloc()
存储时,最好使用无符号类型<代码>大小\u t n;scanf(“%zu”,&n);int-array=calloc(n,sizeof*array)