11

これに関連して他のスレッドを見回してきましたが、どういうわけかわかりません...

評価した一連の値に対して FFT を実行し、このプログラムを作成して、最初に値を読み取り、それらを size の配列に保存したいと考えています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 32-bit を使用しています。

4

2 に答える 2

13
l=FFT(logN,&werte,&nul);
           ^      ^

その行からアンパサンドを削除します。


問題は、このコンテキストの演算子が予想&とは異なる型の式を生成することです。FFTFFT は double へのポインターを期待し、&werteN 要素の配列へのポインターを生成します。したがって、FFT幸せにするためwerteには、最初の要素へのポインターに静かに減衰するものを渡すだけです。

配列へのポインタの詳細については、C FAQがあります。

于 2012-12-28T18:16:04.830 に答える
7

werte[]nul[]は配列ですが、ワードwerte自体は配列の最初の要素のアドレスです。したがって&werte、アドレスのアドレスを渡そうとしている場合(@cnicutarが指摘しているように、これは実際にはN個の要素の配列へのポインターを読み取る必要があります)。したがって、これらの配列のアドレスを渡すために、アンパサンド記号なしwerteで渡すだけです。nul

于 2012-12-28T18:25:58.337 に答える