gpt4 book ai didi

c - 在全局范围内声明动态大小的数组

转载 作者:行者123 更新时间:2023-12-01 14:06:26 25 4
gpt4 key购买 nike

不经常使用 C,我遇到了一个可能很简单的问题。我有几个函数,需要访问全局数组变量g。但是这个变量的实际大小必须在 init() 函数中定义。大小取决于其他一些东西,所以 g 必须以某种方式声明为动态大小。我阅读了 malloc 和其他功能,但我不确定如何正确使用它们。

例子:

double g[dynamic]; // size is not known yet
int n;

void init()
{
// calculate "n" for array size
n = ...
// declare and initialze g with a size "n"
}

void dostuff()
{
for (int i = 0; i < n; i++)
work(g[i]);
}

我应该如何解决这个问题?

最佳答案

您不能使用数组。您必须使用指针

double *global_array; // size is not known yet
size_t nglobal_array; // may be helpful to have the size

void init(void)
{
// calculate "nglobal_array" for array size
nglobal_array = 42;
// declare and initialze global_array with a size "nglobal_array"
global_array = malloc(nglobal_array * sizeof *global_array);
if (global_array == NULL) {
fprintf(stderr, "Error allocating resources.\nProgram aborted.\n");
exit(EXIT_FAILURE);
}
}

void dostuff()
{
for (int i = 0; i < nglobal_array; i++)
work(global_array[i]);
}

当你不再需要它时,别忘了free(global_array)

完整的用法会是这样的

#include <stdlib.h>
// includes
// declarations & definitions as above
int main(void) {
init();
dostuff();
free(global_array);
}

关于c - 在全局范围内声明动态大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57201932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com