簡體   English   中英

如何返回一個指針數組?

[英]How to return an array of 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;
}

有人可以幫我嗎?

在統計中

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

您是否只想要兩個浮點數的數組? 使用結構體可能會更好。

在C語言和此類語言中,“數組”(特別是指針數組)是半熟的數據類型,可以防止像您希望的那樣將它們作為單個對象輕松返回。

您不能將它們作為函數返回的結果

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

使功能分配一些空間並返回指針的常用方法

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

因此,您不必管理分配/取消分配,因為數組是一個自動變量(存在於堆棧中),此外,您不必將數據從一個數組復制到另一個數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM