[英]How can I declare a global array in C first and then initialize its size later?
我有一个我想在全局 scope 中拥有的数组。 但是它的大小是在运行时确定的,所以我不能在我定义它的地方初始化它。
如何在全局 scope 中声明它并在main
function 中分配其大小?
#include <stdlib.h> // for malloc
int *globalarray;
int main()
{
...
globalarray = malloc(thesizeyouwant * sizeof(*globalarray));
...
globalarray[0] = foo;
...
free(globalarray);
}
在您发表评论后,我想没有办法将数组放在堆栈上,我想向您展示指针和指向的 object 可以有任何存储空间。 如果 C 实现支持可变长度数组,则可以使全局指针指向 VLA:
int *glob_array;
int main() {
...
// obtain the size of the array in sz:
size_t sz;
sz = ...
int arr[sz];
glob_arr = arr; // a global pointer to a VLA
...
}
由于arr
是在main
中定义的(而不是在子块中),它只会在程序结束时到达生命周期的尽头。 然而,它具有自动存储功能,这意味着对于大多数实现而言,它将驻留在堆栈中。
免责声明:实际分配是一个实现细节,编译器可以根据需要在堆中分配它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.