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;
}
是合法的?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
理论上这两种都是非法的。
但是后一种,如果去掉 = {...} 的话编译器(部分编译器)是可以编译出正确的代码的。
原因是,第一中写法的数组是全局变量,他的空间是在程序运行初始化的时候分配的,这个时候n并不一定被初始化为一个确定的值。
后一种局部的数组是在程序运行到这一句的时候分配的,这个时候 n 是确定的值,所以程序知道分配多少空间。