-3

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

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

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

我非常感谢任何人可以给我的任何帮助;我一直在修改代码很长时间,到目前为止还没有任何工作。

4

1 回答 1

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));
于 2013-03-11T15:47:22.223 回答