#include <stdio.h>
int main() {
int n = 0, i;
printf("Enter the size of array\n");
scanf("%d", &n);
int a[n];
for (i = 0; i < n; i++) {
a[i] = i + 1;
printf("%d,", a[i]);
}
}
我可以知道malloc()
和calloc()
和这段代码之间的区别,因为我猜两者都满足了需求?
请注意,根据最新标准,VLA 不是规范的强制性部分。分配器函数(malloc()
和系列)是分配内存的标准方式,其大小仅在运行时已知。
引用C18
,第 6.7.6.2/P4 章
[...](可变长度数组是实现不需要支持的条件特性;参见 6.10.8.3。)
也就是说,由于 VLA 的性质,在 VLA 的情况下还有其他使用限制,它们的生命周期在定义的范围内受到限制。例如,您不能从函数调用返回在函数中定义的 VLA,但如果您使用分配器函数,则可以返回指针,因为它的生命周期一直保持到以编程方式释放(调用free()
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句