3

我正在研究一个函数,它需要一些值并找到这些值的最小值、最大值和平均值。我通过引用将所有内容传递给函数,当我尝试执行基本操作时遇到一些错误,例如+/错误是

二进制表达式的无效操作数('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.

}
4

3 回答 3

5

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

第一个必须是:

*total += pA[i];

而第二个应该是:

*avg = (*total / lines);

实际上,您可能希望对那里的第二个错误使用浮点除法(一些编译器因在意想不到的地方使用整数除法而臭名昭著):

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

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

于 2013-02-07T13:20:27.823 回答
2

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

你可能的意思是:

*total += pA[i];

您的使用&pA似乎很混乱,重新分配指针minmax.

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

于 2013-02-07T13:16:55.160 回答
1

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

于 2013-02-07T13:21:31.537 回答