C语言中的静态分配

时间:2014-03-09 12:59:42

标签: c arrays allocation

我有以下代码:

void main ( ) 
{
    int s;
    scanf("%i",&s);
    int a[s];
}

当我尝试编译此代码时,我没有任何错误!问题是我可以分配一个可变大小的静态数组吗?实现此分配的位置(在堆栈或堆中)??

感谢。

3 个答案:

答案 0 :(得分:2)

这是一个可变长度的数组。可变长度阵列是c99标准引入的功能。变量长度数组只能在块作用域声明,并且具有自动存储持续时间(不能使用staticextern说明符声明。

答案 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

这里,编译器对数组进行内存分配。并从堆栈中分配