[英]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.