Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 可变长度数组_C_C99 - Fatal编程技术网

C 可变长度数组

C 可变长度数组,c,c99,C,C99,我想知道可变长度数组是如何管理的(为了拥有可变长度数组,堆栈上保留了哪些额外的变量或数据结构) 非常感谢。它只是一个动态大小的数组(取决于实现,但通常取决于堆栈)。这与过去的alloca非常相似,只是sizeof将返回数组的实际大小,这意味着数组的大小也必须存储在某个地方(也取决于实现,但可能也取决于堆栈)。可变长度数组的大小在运行时确定,而不是编译时间。 它的管理方式取决于编译器。 例如,GCC在堆栈上分配内存。但是没有特殊的结构。它只是一个普通的数组,其大小在运行时是已知的。或者,您可以使用

我想知道可变长度数组是如何管理的(为了拥有可变长度数组,堆栈上保留了哪些额外的变量或数据结构)


非常感谢。

它只是一个动态大小的数组(取决于实现,但通常取决于堆栈)。这与过去的
alloca
非常相似,只是
sizeof
将返回数组的实际大小,这意味着数组的大小也必须存储在某个地方(也取决于实现,但可能也取决于堆栈)。

可变长度数组的大小在运行时确定,而不是编译时间。
它的管理方式取决于编译器。

例如,GCC在堆栈上分配内存。
但是没有特殊的结构。它只是一个普通的数组,其大小在运行时是已知的。

或者,您可以使用一些容器,例如java中的ArrayList或c/c++中的vector

这并不完全正确,因为在创建
alloca()
数组之后无法查询数组的大小,但是
sizeof
可以在VLAs上工作(因此,如果你在数组上调用
sizeof
,那么大小必须保留在某个地方)。@caf:好的观点-我想大小也需要存储在某个地方(取决于实现),然后-我将更新我的答案。-1与问题无关(C99的一个功能是如何实现的)。