C语言中使用指针的函数和数据类型

axkjgtzd  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(80)

一旦结果值被固定为int,我们想把这些数组的平均值取到小数点,但是即使我们把它改成(float)*result = sum_address/5;在函数call_address中,应该没有错误。

#include <stdio.h>

void call_value(int A[], int result)
{
        int i;
        int sum = 0;
        for(i = 0; i < 5; i++)
        {
                sum += A[i];
        }

        result = sum / 5;
}

void call_address(int A[], int *result)
{
        int i;
        double sum_address = 0;

        for(i = 0; i < 5; i++)
        {
                sum_address += A[i];
        }

        *result = sum_address / 5;
}

int main()
{
        int result = 0;
        int A[5] = {95, 88, 76, 54, 85};

        call_value(A,result);
        printf("[Call by value] result = %d\n",result);

        call_address(A,&result);
        printf("[Call by address] result = %.1f\n",(float)result);
}

我们期望数组的平均值为79.6,但实际上只有79.0。因为这是一个任务,所以int result = 0和int *result不应更改。

n53p2ov0

n53p2ov01#

我大胆地猜测,您应该在main中进行除法运算,这两个函数只用于对数组的值求和。

#include <stdio.h>

void call_value(int A[], int result)
{
    for (int i = 0; i < 5; i++)
    {
        result += A[i];
    }
}

void call_address(int A[], int *result)
{
    for(int i = 0; i < 5; i++)
    {
        *result += A[i];
    }
}

int main(void)
{
    int result = 0;
    int A[5] = { 95, 88, 76, 54, 85 };

    call_value(A, result);
    printf("[Call by value] result(%d) = %.1f\n", result, result / 5.0);

    call_address(A, &result);
    printf("[Call by address] result(%d) = %.1f\n", result, result / 5.0);
}

输出量:

[Call by value] result(0) = 0.0
[Call by address] result(398) = 79.6

否则,在无法更改result的数据类型的情况下,就没有合理的解决方案来解决此问题。

相关问题