返回信息流一般情况下,数组的大小是要在编译时确定的,如果要在运行时确定大小,就要用malloc等动态分配内存。
比如:
int n;
scanf("%d", &n);
if(n) {
int *a = (int *)malloc(n*sizeof(int));
}
但我这样改写后:
int n;
scanf("%d", &n);
if(n) {
int a[n];
}
居然编译通过,这是为什么呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #81145同步于 2014/7/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
C数组动态分配内存
wdx01
2014/7/30镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
自古以来的C标准里是允许变长数组初始化的(C99),但是需要兼容更古老的C标准而做妥协(C89),而且C++里似乎一直没有把这种行为摆在明面上说(据说C++1y说了,但我还没时间看新标(拍~))。
当然编译器自身是会考虑在扩展中增加这种定义方式的支持,毕竟使用起来更方便了。
【 在 tonyjansan 的大作中提到: 】
: 自古以来的C标准里是允许变长数组初始化的(C99),但是需要兼容更古老的C标准而做妥协(C89),而且C++里似乎一直没有把这种行为摆在明面上说(据说C++1y说了,但我还没时间看新标(拍~))。
: 当然编译器自身是会考虑在扩展中增加这种定义方式的支持,毕竟使用起来更方便了。
谢谢!
编译器问题,我以c++为例,c++标准是不允许你改后那样的,但是呢codeblock和dev能编译通过,vs和g++不行。我觉得还是不要纠结编译器的问题,按照标准来准没错。