将评论转换为答案。
在标准 C 中,您不能从函数返回数组——您可以返回指针 OK(因此显示的代码是允许的,尽管它显然存在重入和线程问题)。如果不能使用static
ormalloc()
等,则需要将数组传递给函数以供其填充,而不是返回数组。然后分配空间是调用者的责任。
另见srand() — 为什么只调用一次。
所以你的意思是我可以将一个全局数组设置为函数参数并为每个元素赋值,这样我就可以在不使用static
and的情况下获取数组malloc
?
是的,或者是本地数组,或者你想的任何其他类型的数组。我认为适当的实现可能是:
void getRandom(int n_vals, int *i_vals)
{
for (int i = 0; i < n_vals; i++)
i_vals[i] = rand();
}
但可能的变化是军团。如果您真的需要,您可以恢复打印;srand()
如果你真的想打电话,你甚至可以打电话(但你应该只打电话一次)。然后你可以像这样使用它:
void somefunc(void)
{
int data[20];
getRandom(15, data);
…use data…;
}
或者
static int data[20];
void somefunc(void)
{
getRandom(18, data);
…use data…;
}
或其他变体(例如不在static
文件范围定义前面使用data
——将其转换为全局变量)。(是的,您可能会在问题中使用 10,或者使用 20 作为数组中的空间量——但 15 和 18 在它们的上下文中也是可以的值。)