1. ホーム
  2. c

[解決済み] 2進数式の無効なオペランド, C

2022-02-14 05:45:43

質問

ある値を受け取り、その値の最小値、最大値、平均値を求める関数に取り組んでいます。この関数にはすべて参照を渡しているのですが、次のような基本的な操作を行おうとするとエラーが発生します。 +/ すなわち、エラーは

バイナリ式のオペランドが無効です('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.

}

解決方法は?

タイプのいくつかを混同しているようですね。この例では ポインター を新しい値に変換するのであって、ポインタの値ではありません。

ということになるのでしょう。

*total += pA[i];

2番目はそうであるべきですが。

*avg = (*total / lines);

実際、2つ目のエラーでは浮動小数点数の除算を使いたいでしょう(コンパイラーの中には、予期せぬ場所で整数の除算を使うものがあるのは有名です)。

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

しかし、そのようにしてもエラーは出ます。例えば &pA[i] > ... はポインタの比較になり、つまり アドレス のポインタが比較されます。おそらく、あなたが望むものではありません。