繁体   English   中英

如何先在 C 中声明一个全局数组,然后再初始化它的大小?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM