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 机器上编写时可能会有所不同,如果这是操作系统的问题,我使用的是 Linux、Lubuntu 12.10 32 位。

4

2 回答 2

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

从该行删除&符号。


问题在于,此上下文中的运算符生成的表达式与预期&的类型不同。FFTFFT 需要一个指向双精度的指针,并&werte产生一个指向 N 元素数组的指针。所以,为了让FFT快乐,只需传递wertewhich 将悄悄地衰减到指向第一个元素的指针。

有关指向数组的指针的更多信息,请参阅C FAQ

于 2012-12-28T18:16:04.830 回答
7

werte[]nul[]是数组,但单词werte本身是数组第一个元素的地址。因此,当您&werte尝试传递地址时(正如@cnicutar 指出的那样,这实际上应该读取指向 N 个元素数组的指针)。所以只需通过werte并且nul没有与符号来传递这些数组的地址。

于 2012-12-28T18:25:58.337 回答