开发者社区 问答 正文

C语言变长数组是否只能拥有自动存储期限?

rt,是不是变长数组只能拥有自动存储期限,而拥有静态存储期限的就不会被视为变长数组?
e.g.:

#include <stdio.h>

int n = 10;
int a[n] = {...};

int main(void)
{
    for (int i = 0; i < n; i++)
        printf("%d", a[i]);

    return 0;
}
是非法的

#include <stdio.h>

int main(void)
{
    int n = 10;
    int a[n] = {...};

    for (int i = 0; i < n; i++)
        printf("%d", a[i]);

    return 0;
}

是合法的?

展开
收起
a123456678 2016-06-08 14:51:01 2256 分享 版权
1 条回答
写回答
取消 提交回答
  • 理论上这两种都是非法的。
    但是后一种,如果去掉 = {...} 的话编译器(部分编译器)是可以编译出正确的代码的。
    原因是,第一中写法的数组是全局变量,他的空间是在程序运行初始化的时候分配的,这个时候n并不一定被初始化为一个确定的值。
    后一种局部的数组是在程序运行到这一句的时候分配的,这个时候 n 是确定的值,所以程序知道分配多少空间。

    2019-07-17 19:31:59
    赞同 展开评论