我编写了一个简单的代码,将一个整数作为来自用户的输入,并分配一个该变量大小的数组。
#include <stdio.h>
int main(){
int n, i;
scanf("%d", &n);
int arr[n];
for(i=0; i<n; i++){
arr[i] = i;
}
for(i=0; i<n; i++){
printf("%d\t", arr[i]);
}
return 0;
}上面的代码工作得很好(如果数组大小不是很大,那么请给出seg大小约为2,150,000的错误)。这怎么允许?我认为这应该使用动态内存分配,因为数组大小是可变的。
我整个内存分配的概念都被动摇了。请解释在什么条件下这是允许的(如果这是一个法律法规)。
发布于 2016-09-18 17:30:50
允许可变长度的自动数组从标准的ISO C99版本开始,
这是引用自2011年C标准的6.7.5.2数组声明器:
如果不存在大小,则数组类型是不完整类型。如果大小为*而不是表达式,则数组类型是未指定大小的可变长度数组类型,只能用于具有函数原型作用域的声明。 如果大小是一个非整数常量表达式的表达式:如果它发生在函数原型作用域的声明中,则将其视为被*替换;否则,每次求值时,它的值都应大于零。可变长度数组类型的每个实例的大小在其生存期内不会更改。
https://stackoverflow.com/questions/39560413
复制相似问题