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

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

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

我真的很感谢任何人能给我的任何帮助;我已经花了很长时间修改代码,但到目前为止还没有任何工作。

最佳答案

如果你在 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));

关于c - 如何在 C 中创建一个用新数组替换数组的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15342683/

相关文章:

c - 数组未在 if 语句 C 内更新

c - 如何在 C 程序中禁用操作系统 (Ubuntu) 缓存

c - 归并排序功能

c++ - 何时以及如何对不同类型的文件进行读/写 block (即暂停您的程序)?

c - 在 C 中释放二维数组

c - 在 C 主参数中使用 long** 而不是 char**

c - GDB 未使用的变量

c - ` int a = 2; int b = a;` 报告意外错误

c++ - 1<<25 在开放中意味着什么?

C编程。文件 I/O、链接列表和结构