如何使用双参数调用以下 void 函数?

How can I call the following void function with double parameters?

这就是我目前拥有的,我不知道该怎么做才能做到这一点运行:

void avg_sum(double a[], int n, double *avg, double *sum) {   
    int i;
    *sum = 0.0;

    for (i = 0; i < n; i++)
        *sum += a[i];

    *avg = *sum / n; 
}

int main () {
    int array[5] = {1, 2, 3, 4, 5};
    int avg = 3;
    int sum = 2;

    avg_sum(array, 5, avg, sum);
}

我尝试操纵 运行 函数的参数,但我不知道如何让它工作。可以很简单,我只需要编写一个程序来测试 avg_sum 函数。该部分必须保持不变。

你想要这个:

int main () {
    double array[5] = {1, 2, 3, 4, 5};  // use double
    double avg = 3;
    double sum = 2;

    avg_sum(array, 5, &avg, &sum);      // call with &
}
  • avg_sumdouble 上运行,因此您需要提供双打。
  • 参数3和4必须指针加倍,因此需要使用地址运算符&.

所有这些都包含在您的初学者 C txt 书的第一章中。

对于初学者这些初始化

int avg = 3;
int sum = 2;

没有意义。

至少将这些变量初始化为零更有意义

int avg = 0;
int sum = 0;

函数 avg_sum 期望第三个和第四个参数通过指向它们的指针的引用被接受。

void avg_sum(double a[], int n, double *avg, double *sum) { 

所以函数必须这样调用

avg_sum(array, 5, &avg, &sum);

该函数还期望使用类型说明符 double 声明的第一个、第三个和第四个参数,但您正在传递使用类型说明符 int.

声明的参数

函数本身应按以下方式声明和定义

void avg_sum( const int a[], size_t n, double *avg,  int *sum ) 
{   
    *sum = 0;
    for ( size_t i = 0; i < n; i++ )
    {
        *sum += a[i];
    }

    *avg = n == 0 ? 0.0 : *sum / n; 
}

因此在 main 中,变量 avgsum 必须声明为

double avg = 0.0;
int sum = 0;

同样在函数调用后

avg_sum(array, 5, &avg, &sum);

看来你应该输出获得的值,例如

printf( "sum = %d, average = %.2f\n", sum, avg );