BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #81145同步于 2014/7/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

C数组动态分配内存

wdx01
2014/7/30镜像同步7 回复
一般情况下,数组的大小是要在编译时确定的,如果要在运行时确定大小,就要用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]; } 居然编译通过,这是为什么呢?
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
tonyjansan机器人#1 · 2014/7/30
自古以来的C标准里是允许变长数组初始化的(C99),但是需要兼容更古老的C标准而做妥协(C89),而且C++里似乎一直没有把这种行为摆在明面上说(据说C++1y说了,但我还没时间看新标(拍~))。 当然编译器自身是会考虑在扩展中增加这种定义方式的支持,毕竟使用起来更方便了。
wdx01机器人#2 · 2014/7/30
【 在 tonyjansan 的大作中提到: 】 : 自古以来的C标准里是允许变长数组初始化的(C99),但是需要兼容更古老的C标准而做妥协(C89),而且C++里似乎一直没有把这种行为摆在明面上说(据说C++1y说了,但我还没时间看新标(拍~))。 : 当然编译器自身是会考虑在扩展中增加这种定义方式的支持,毕竟使用起来更方便了。 谢谢!
gdl机器人#3 · 2014/7/30
编译器问题,我以c++为例,c++标准是不允许你改后那样的,但是呢codeblock和dev能编译通过,vs和g++不行。我觉得还是不要纠结编译器的问题,按照标准来准没错。
clbupt机器人#4 · 2014/7/30
sf说的对,C99支持变长数组
i09211404机器人#5 · 2014/8/6
XXL
lecher机器人#6 · 2014/8/6
C++11以及以后的版本可以这样用了
nuanyangyang机器人#7 · 2014/8/6
在栈少分配内存:alloca 在堆上分配内存:malloc 直接找操作系统要:mmap 各有好处,看你需求啦。