首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么GCC允许对可变大小的数组进行静态内存分配?

为什么GCC允许对可变大小的数组进行静态内存分配?
EN

Stack Overflow用户
提问于 2016-09-18 17:08:20
回答 1查看 480关注 0票数 1

我编写了一个简单的代码,将一个整数作为来自用户的输入,并分配一个该变量大小的数组。

代码语言:javascript
复制
#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的错误)。这怎么允许?我认为这应该使用动态内存分配,因为数组大小是可变的。

我整个内存分配的概念都被动摇了。请解释在什么条件下这是允许的(如果这是一个法律法规)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-18 17:30:50

允许可变长度的自动数组从标准的ISO C99版本开始,

这是引用自2011年C标准的6.7.5.2数组声明器:

如果不存在大小,则数组类型是不完整类型。如果大小为*而不是表达式,则数组类型是未指定大小的可变长度数组类型,只能用于具有函数原型作用域的声明。 如果大小是一个非整数常量表达式的表达式:如果它发生在函数原型作用域的声明中,则将其视为被*替换;否则,每次求值时,它的值都应大于零。可变长度数组类型的每个实例的大小在其生存期内不会更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39560413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档