二进制表达式的操作数无效,C

时间:2013-02-07 13:14:17

标签: c

我正在处理一个函数,它接受一些值并找到值的最小值,最大值和平均值。我通过引用将所有内容传递给函数,当我尝试执行基本操作(例如+/时出现错误。即错误是

  

二进制表达式的操作数无效('double *'和'double *')

void MinMaxAvg(double *pA, double *min, double *max, double *avg, int lines, double *total )
{
    for (int i=0; i<lines; i++)
    {
        if ( i==0)
        {
            min = &pA[0];
            max = &pA[0];
        }
        else
        {
            if (&pA[i] < min)
            {
                min = &pA[i];
            }

            if (&pA[i] > max)
            {
                max = &pA[i];
            }
        }

        total += &pA[i];     //<-- Errors on this line

    }

    avg = (total / lines);         // <-- Errors on this line.

}

3 个答案:

答案 0 :(得分:5)

似乎你得到了一些混淆的类型。在您的示例中,您将指针设置为新值,而不是所述指针的值。

第一个必须是:

*total += pA[i];

第二个应该是:

*avg = (*total / lines);

事实上,你可能想在第二个错误上使用浮点除法(有些编译器因在意想不到的地方使用整数除法而臭名昭着):

*avg = (*total / (double)lines);

但是,如果你这样做,你仍会遇到错误。例如,&pA[i] > ...将导致指针比较,即将比较指针的地址。很可能不是你想要的。

答案 1 :(得分:2)

您正在尝试向指针添加地址,这不是有效的操作。

你可能意味着:

*total += pA[i];

您对&pA的使用似乎非常困惑,指针minmax的重新分配也是如此。

如果你有一个指向值的指针(如double *min),那么*min就是你访问(读或写)指向的值的方式。

答案 2 :(得分:1)

与C ++不同,C语言中没有“通过引用传递”。如果要使用变量值,则应取消引用代码中的每个指针。现在使用变量地址。