数组C通过引用传递

时间:2015-01-15 22:33:36

标签: c

如何通过引用将数组作为函数参数传递,这样我就可以为它分配内存然后返回它。我已经按照例行程序返回了另一个rarray。

int main(){
float * array_in = NULL;
float * data = Fill_Array(&array_in);
return 0;
}

float * Fill_Array(float * array)
{
    array    = malloc(sizeof(float*));
    *array[1] = 10;

    float * return_array = malloc(sizeof(float*));

    return return_array;
}

3 个答案:

答案 0 :(得分:2)

我想你想要这样的东西:

#include <stdio.h>
#include <stdlib.h>

void
Fill_Array (float **pArray)
{
  *pArray = malloc (sizeof (float) * 100);      /* 100 = number of items */

  (*pArray)[0] = 1.0;
  (*pArray)[1] = 2.0;
  return;
}

int
main ()
{
  float *array_in = NULL;
  Fill_Array (&array_in);
  /* do something here */
  free (array_in);
  return 0;
}

在传递指针而不是粗制副本的意义上,数组总是通过引用传递。如果要在函数中进行分配,则需要将指针传递给指针。

答案 1 :(得分:0)

这段代码搞砸了。我不知道该怎么办。

首先,您可以传递这样的数组:

Fill_Array(array_in);

但是这段代码不起作用。首先,Fill_Array做的第一件事是通过用新分配的内存块覆盖变量来抛弃值。

其次,您只分配了足够的内存或指向浮点数的指针。将浮点数写入内存返回是不安全的。

最后,您再次拨打malloc()。通过调用free()释放任何内存的位置在哪里?这导致内存泄漏。

您需要更好地定义您要执行的操作,然后重新开始。

答案 2 :(得分:0)

另一种变体。这个没有内存泄漏。

您可以创建任意数量的任何维数组。 只是不要忘记成对工作&#34;创建 - 破坏&#34;

#include <stdio.h>
#include <stdlib.h>

float *CreateArray (int N)
{
  float *arr = malloc (sizeof (float) * N);      

  for (int i = 0; i<N; i++)
    arr[i] = 0.0f;

  return arr;
}

void DestroyArray (float *arr)
{
  free(arr);    
}

int main ()
{
  int N = 10;   /* number of items you need this time*/
  float *arr = CreateArray (N);
    //...do something

  DestroyArray (arr);

  //.......
  return 0;
}