【发布时间】:2013-05-16 08:34:10
【问题描述】:
有两种方法可以为数组分配内存,其中的大小一开始是未知的。最常见的方式是像这样使用malloc
int * array;
... // when we know the size
array = malloc(size*sizeof(int));
但在 C99 中,在我们知道大小后定义数组也是有效的。
... // when we know the size
int array[size];
它们绝对是一样的吗?
【问题讨论】:
-
第二个,即使在 C99 中,也不总是有效的。根据 C99 §6.10.8.3 Conditional Feature Macros,实现可以定义 _STDC_NO_VLA_ 和 not 实现可变长度数组,并且仍符合标准。
-
这不是重复的问题!所引用的问题都没有关于差异的详细信息。
-
@WhozCraig AFAIK,这是 2011 年的事情。在我所拥有的内容中没有这样的部分声称是 C99 标准的副本。
-
@WhozCraig 这是 2011 版标准的工作草案。 VLA 是可选的,它们不在 1999 版中。该部分还没有在 C99 中,它是在标准之间的 12 年中添加的。 (以防万一here 是批准前的最后一个草案。)
-
@DanielFischer 感谢您的链接和澄清,先生。我从来没有一天不学习新东西。
标签: c malloc variable-length-array