1
3
不 与指针相同,并且 C-FAQ has a Very Good collection detailing the reasons 在可用性和行为方面的主要区别是:
注: Wiki
|
2
2
创建数组
|
3
2
除了其他人所说的,我还将添加一些关于内存管理的信息。 1) 主要区别在于:
您需要手动管理分配的内存,例如
2) 对于第二种情况:
你不需要释放任何东西。它会被自动销毁。因此,您可以避免处理内存的任务—这是很好的。 一些要点。
|
4
1
最显著的区别是范围。VLA数组只在声明它的作用域内有效,而在调用
(编译器在理论上可以在堆上分配一个VLA,但是编译器也将负责清理。我不认为存在这样的解决方案。我使用的每个编译器都会在堆栈上声明VLAs。) 这意味着vla不适合保存大量数据:您可能会面临堆栈溢出的风险。但是,当您使用动态内存时,这不是一个问题。 VLAs没有动态数组那样的可移植性,因为非常旧的编译器不支持VLAs。理论上,新的C11编译器也不必支持VLAs,尽管在这一点上,我知道没有一个编译器愚蠢到可以放弃这种支持。 比较/总结:
|