我有以下代码:
void main ( )
{
int s;
scanf("%i",&s);
int a[s];
}
当我尝试编译此代码时,我没有任何错误!问题是我可以分配一个可变大小的静态数组吗?实现此分配的位置(在堆栈或堆中)??
感谢。
答案 0 :(得分:2)
这是一个可变长度的数组。可变长度阵列是c99标准引入的功能。变量长度数组只能在块作用域声明,并且具有自动存储持续时间(不能使用static
或extern
说明符声明。
答案 1 :(得分:1)
这是一个C99的东西,虽然作为一些编译器的扩展支持。阅读http://en.wikipedia.org/wiki/Variable-length_array - GCC在堆栈上分配它们。
答案 2 :(得分:1)
根据ANSI C(C89),数组具有可变长度是不合法的。
在这种情况下,您需要从堆中动态分配内存。
int *a = (int*) malloc(s * sizeof(int));
如果您在编译时知道s的值,则可以按如下方式使用自动分配:
int a[10]; //value of s taken to be 10
这里,编译器对数组进行内存分配。并从堆栈中分配