如何在C中创建一个用新数组替换数组的函数

时间:2013-03-11 15:40:23

标签: c

我已经在互联网上寻找解决方案,并尝试了各种不同的代码安排,但无法找到任何有效或能产生正确结果的东西。基本上,我想要一个函数,它将已经创建的数组作为参数,基于前一个数组创建一个新数组,并基于其他一些参数的值,然后替换原来用作的数组。带有新创建的数组的参数。代码看起来像这样:

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],...)
 }

所有注释部分只是代表我想用这个数组执行的具体任务,以及我特别选择给它的值,这些并不重要。我想弄清楚的是需要对我用于数组,指针和参数的符号做出哪些更改;我需要进行哪些更改才能获得所需的结果。如果需要,可以将原始数组的大小作为附加参数输入到函数中,如果这是使其工作的唯一方法。我还要补充说,新数组的大小并不总是与原始数组的大小相同(取决于参数)。

我真的很感激任何人都能给我的帮助;我一直在修补代码很长时间,到目前为止还没有任何工作。

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));