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

发布于 2022-09-01 12:20:20 字数 456 浏览 11 评论 0

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;
}

是合法的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

此岸叶落 2022-09-08 12:20:20

问题已经解决,感谢大家的回答!
脑子一抽写错了点————变长数组没法写初始化式。。。
另外,变长数组不能具有静态存储期限,因为它的长度是编译时决定的,而变长数组的长度要到运行时才能确定,所以只能是作为拥有自动存储期限的变量。

另外变长数组是C99新特性,不过vc比较拽一直懒得实现。

清晰传感 2022-09-08 12:20:20

理论上这两种都是非法的。
但是后一种,如果去掉 = {...} 的话编译器(部分编译器)是可以编译出正确的代码的。
原因是,第一中写法的数组是全局变量,他的空间是在程序运行初始化的时候分配的,这个时候n并不一定被初始化为一个确定的值。
后一种局部的数组是在程序运行到这一句的时候分配的,这个时候 n 是确定的值,所以程序知道分配多少空间。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文