1. ホーム
  2. c

[解決済み] 警告: 引数 'from 非互換のポインタ型 [デフォルトで有効]' を渡す

2022-01-31 09:26:29

質問

なんとなく他のスレッドを見て回ったのですが、なんとなくピンとこない...。

評価した値のセットに対してFFTを行いたいのですが、まず値を読み込んで、サイズの配列に保存するプログラムを書きました。 n .

int main () {
    // some variables and also a bit of code to read the 'messwerte.txt'

printf("Geben sie an wieviele Messwerte ausgelesen werden sollen: ");
scanf("%d", &n);
double werte[n]; //Array der "fertigen" Messwerte
in = fopen ("messwerte.txt","r");
double nul[n]; //Array von nullen

int logN = 14;
l=FFT(logN,&werte,&nul);
}

同じファイルで、このプログラムの助けを借りてFFTも行っています。

double FFT (int logN, double *real, double *im) //logN is base 2 log(N) {
// blabla FFT calculation
}

しかし、コンパイルすると必ずこのエラーが出ます。

gcc FFT.c -lm
FFT.c: In function ‘main’:
FFT.c:94:2: warning: passing argument 2 of ‘FFT’ from incompatible pointer type [enabled by default]
FFT.c:4:8: note: expected ‘double *’ but argument is of type ‘double (*)[(unsigned int)(n)]’
FFT.c:94:2: warning: passing argument 3 of ‘FFT’ from incompatible pointer type [enabled by default]
FFT.c:4:8: note: expected ‘double *’ but argument is of type ‘double (*)[(unsigned int)(n)]’

プログラミングは初めてなので、私のコードのどこが悪いのか本当にわかりません。コンパイラにもっとフラグを設定しなければならないのでしょうか、それともそのようなものなのでしょうか(私はこのようなことをしなければならなかったので -lm のようなものがないとコンパイルできず、pow not foundとか言われた)?

また、WindowsとLinuxのマシンで書くと違いが出るかもしれないということで、OSの問題であればLinuxのLubuntu 12.10 32bitを使っているのですが。

解決方法は?

<ブロッククオート
l=FFT(logN,&werte,&nul);
           ^      ^

その行からアンパサンドを削除してください。


問題は & 演算子が生成する式は、この文脈では FFT が期待されます。FFTはdoubleへのポインタを想定しており &werte はN個の要素を持つ配列へのポインタを生成します。そこで FFT を渡すだけで、幸せになれます。 werte は静かに最初の要素へのポインタに減衰します。

配列へのポインタに関する詳しい情報は C FAQ .