C 可变长度数组
我想知道可变长度数组是如何管理的(为了拥有可变长度数组,堆栈上保留了哪些额外的变量或数据结构)C 可变长度数组,c,c99,C,C99,我想知道可变长度数组是如何管理的(为了拥有可变长度数组,堆栈上保留了哪些额外的变量或数据结构) 非常感谢。它只是一个动态大小的数组(取决于实现,但通常取决于堆栈)。这与过去的alloca非常相似,只是sizeof将返回数组的实际大小,这意味着数组的大小也必须存储在某个地方(也取决于实现,但可能也取决于堆栈)。可变长度数组的大小在运行时确定,而不是编译时间。 它的管理方式取决于编译器。 例如,GCC在堆栈上分配内存。但是没有特殊的结构。它只是一个普通的数组,其大小在运行时是已知的。或者,您可以使用
非常感谢。它只是一个动态大小的数组(取决于实现,但通常取决于堆栈)。这与过去的
alloca
非常相似,只是sizeof
将返回数组的实际大小,这意味着数组的大小也必须存储在某个地方(也取决于实现,但可能也取决于堆栈)。可变长度数组的大小在运行时确定,而不是编译时间。它的管理方式取决于编译器。
例如,GCC在堆栈上分配内存。
但是没有特殊的结构。它只是一个普通的数组,其大小在运行时是已知的。或者,您可以使用一些容器,例如java中的ArrayList或c/c++中的vector这并不完全正确,因为在创建
alloca()
数组之后无法查询数组的大小,但是sizeof
可以在VLAs上工作(因此,如果你在数组上调用sizeof
,那么大小必须保留在某个地方)。@caf:好的观点-我想大小也需要存储在某个地方(取决于实现),然后-我将更新我的答案。-1与问题无关(C99的一个功能是如何实现的)。