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];

2番目は次のようになります。

*avg = (*total / lines);

実際、2番目のエラーで浮動小数点除算を使用することをお勧めします(一部のコンパイラは、予期しない場所で整数除算を使用することで有名です)。

*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 に答える