どういうわけかこれに関連する他のスレッドを見回してきましたが、どういうわけか私はそれを取得できません...
評価してこのプログラムを作成した一連の値に対して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が見つからないなどと言ったのですか?
また、WindowsまたはLinuxマシンでの書き込みでは違いがある可能性があることに気づきました。OSの問題であれば、Linux、Lubuntu 12.1032ビットを使用しています。
l=FFT(logN,&werte,&nul); ^ ^
その行からアンパサンドを削除します。
問題は、このコンテキストの&
演算子が、FFT
が期待するものとは異なるタイプの式を生成することです。 FFTはdoubleへのポインターを予期し、&werte
はN個の要素の配列へのポインターを生成します。したがって、FFT
を幸せにするには、werte
を渡すだけで、最初の要素へのポインタに静かに減衰します。
配列へのポインタの詳細については、 C FAQ があります。
werte[]
およびnul[]
は配列ですが、Word werte
自体は配列の最初の要素のアドレスです。だからあなたがするとき&werte
アドレスのアドレスを渡そうとしています(@ cnicutarが指摘したように、これは実際にはN個の要素の配列へのポインタを読み取る必要があります)。 SO werte
とnul
をアンパサンド記号なしで渡すだけで、これらの配列のアドレスを渡すことができます。