[解決済み] 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] > ...
はポインタの比較になり、つまり
アドレス
のポインタが比較されます。おそらく、あなたが望むものではありません。
関連
-
[解決済み】strcmpが機能しない
-
[解決済み】組み込み関数「malloc」の暗黙の宣言の非互換性
-
[解決済み】エラー:'for'ループの初期宣言はC99モードでしかできない【重複
-
[解決済み】GCC Cコードで静的宣言が非静的宣言に続くことを解決するには?
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み] [Solved] なぜこのようなエラーが発生するのでしょうか。「データ定義に型またはストレージクラスがない」?
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み】c - 警告:関数 'printf'の暗黙の宣言
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Cコンパイルエラー。"変数サイズのオブジェクトが初期化されていない可能性がある"
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み] C: エラー: ';'トークンの前に ')' があると予想される
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】警告:引数「互換性のないポインタ型から」を渡す[デフォルトで有効]。
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない