我已经在互联网上寻找解决方案,并尝试了各种不同的代码安排,但无法找到任何有效或能产生正确结果的东西。基本上,我想要一个函数,它将已经创建的数组作为参数,基于前一个数组创建一个新数组,并基于其他一些参数的值,然后替换原来用作的数组。带有新创建的数组的参数。代码看起来像这样:
void function(double *array, double other_parameter)
{
/* do some calculations involving the array and the parameter */
double new_array[/* some # */] = /* some expression */;
*array = *new_array;
}
main()
{
double *x[/* some # */];
x[0]=/* some # */;x[1]=/* some # */;x[2]=/* some # */,...
double par = /* something */
function(x,par);
printf("x =\n%f\n%f\n",x[0],x[1],...)
}
所有注释部分只是代表我想用这个数组执行的具体任务,以及我特别选择给它的值,这些并不重要。我想弄清楚的是需要对我用于数组,指针和参数的符号做出哪些更改;我需要进行哪些更改才能获得所需的结果。如果需要,可以将原始数组的大小作为附加参数输入到函数中,如果这是使其工作的唯一方法。我还要补充说,新数组的大小并不总是与原始数组的大小相同(取决于参数)。
我真的很感激任何人都能给我的帮助;我一直在修补代码很长时间,到目前为止还没有任何工作。
答案 0 :(得分:1)
如果您在C中分配数组,则永远不能将其传递回堆栈。 (即回到调用函数)
要创建数组并将其重新发送,您需要使用malloc()
double* my_ar = malloc(sizeof(double) * ar_size);
...
free(my_ar);
如果你想扩展那个数组
my_ar = realloc(my_ar, sizeof(double) * new_size);
这将释放您之前的数组,并创建一个大小相同且内容相同的新数组,或者它将扩展您之前的数组。
如果您想复制数组
#include <string.h>
...
double* new_ar = malloc(my_ar, sizeof(double) * new_ar_size);
memcpy(new_ar, my_ar, MIN(ar_size, new_ar_size) * sizeof(double));