如何返回一个指针数组?

时间:2015-06-14 09:42:32

标签: c arrays pointers

我刚刚编写了这段代码来计算数组数组的方差和均值,但我找不到返回指针数组的方法。

这是我的功能:

float* statistics(int numbers[], int numbers_len, float * ptr_mean,
float * ptr_variance, float * ptr_stdev, int * ptr_median){

  float*mean; float*variance; float stat[4]; float*array_stat;
  int i=0;

  mean=calculate_mean(numbers, numbers_len);
  variance=calculate_variance(numbers, numbers_len, mean);
  stat[0]=*mean;
  free(mean);
  mean=NULL;

  stat[1]=*variance;
  free(variance);
  variance=NULL;

  for(i=0;i<2;i++){
    array_stat=(float*)calloc(2, sizeof(float));
    array_stat[i]=stat[i];
  }

  return array_stat;
}

我需要 array_stat 作为指针数组。 在 int main()中,我用这种方式调用函数 * statistics()

int main(){
  int array_numbers[MAX_ITEMS];
  int n_numbers, i=0;
  float *calculate_statistics;

  calculate_statistics = statistics(array_numbers, n_numbers, ptr_mean,  
  ptr_variance, ptr_stdev, ptr_median);
  for(i=0;i<2;i++){
     printf("\n[%d] ITEM > %0.2f\n", i+1, *calculate_statistics);
  }
  free(calculate_statistics);
  calculate_statistics=NULL;
}

有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

统计数据()

array_stat=(float*)calloc(2, sizeof(float));
  for(i=0;i<2;i++){
    array_stat[i]=stat[i];
  }

在main()

for(i=0;i<2;i++){
     printf("\n[%d] ITEM > %0.2f\n", i+1, calculate_statistics[i]);
  }

你只想要一个两个花车阵列吗?你可能最好使用结构。

答案 1 :(得分:0)

在C语言和这样的语言中,“数组”(不是spécifically指针数组)是半生不熟的数据类型,它们可以防止将它们作为单个对象轻松返回。

您不能将它们作为函数返回的结果

 int[4]  foo(..parameters...) // no
 {
      int tmp[4];
      ....
      return tmp;             // no
 }

执行此操作的常用方法是使fonction分配一些空间,并返回指针

int*    foo( ...parameters...) 
{
     int *tmp = malloc(4 *sizeof(int));
     ....
     return tmp;
}
因此调用者必须处理指针。看起来像一个数组(你可以使用索引的[]表示法),但要注意内存泄漏:你必须管理释放。

另一种方法是使用额外的参数调用该函数:函数将放置结果的地址。

 void  foo(...parameters...,  int results[4])
 {
      // do some stuff
      // put the results in, hum, results
 }

呼叫序列:

 int results[4];
 ...
 foo(12, 345, 6789, results);
 // here we are

所以你不必管理分配/释放,因为数组是一个自动变量(存在于堆栈中),而且,你不必将数据从数组复制到数组。