Я использую fftw для преобразования Фурье в С++. Существует стандартный тип данных fftw_complex, который по сути является двойным[2]. Я хочу сделать массив fftw_complex. я делаю это с
typedef fftw_complex fftw_complex_16[65536];
Я установил все в ноль в массиве. Затем у меня есть еще одна функция, которая должна проверять, пуст ли fftw_complex_16.
bool is_empty_fftw_complex_16(fftw_complex_16 *thecomplex){
std::cout<<"Test\n"<<::vowels["a:"][0][0]<<std::endl;
for (unsigned long i=0; i<65536; i++){
if (thecomplex[i][0] != 0 || thecomplex[i][1] != 0){
std::cout<<"Huch!"<<i<<std::endl;
std::cout<<thecomplex[i][0]<<" -- "<<thecomplex[i][1]<<std::endl;
std::cout<<*thecomplex[i][0]<<" -- "<<*thecomplex[i][1]<<std::endl;
return 1;
}
}
return 0;
}
Забудьте о couts, они только для отладки. Единственное, что должна делать функция, — это возвращать true, если массив, на который указывает аргумент указателя, пуст, и false в противном случае. Это не работает. Функция говорит, что массив не пуст, когда это так! Помогите пожалуйста, что я делаю не так?





Проблема похоже в этом
bool is_empty_fftw_complex_16(fftw_complex_16 *thecomplex){
что по твоему описанию должно быть на самом деле это
bool is_empty_fftw_complex_16(fftw_complex *thecomplex){
но трудно быть полностью уверенным, потому что вы не опубликовали код, который устанавливает этот массив и вызывает эту функцию, что, к сожалению, очень важно упустить.
Что-то вроде этого было бы правильным способом вызова функции
fftw_complex_16 array;
...
is_empty_fftw_complex_16(array);
Я предполагаю, что вы объединили неправильное объявление выше с этим неправильным вызовом.
fftw_complex_16 array;
...
is_empty_fftw_complex_16(&array);
Это компилируется, но не делает то, что вы хотели.
Он работает так, как ожидалось. Но не могли бы вы объяснить, почему я должен использовать fftw_complex в качестве типа переменной аргумента вместо fftw_complex_16, поскольку данная переменная (массив) имеет тип fftw_complex_16? Спасибо
@TomAtix Это обычная процедура для C++ при передаче массива в функцию. Поскольку вы не можете передать массив функции, вместо этого вы передаете указатель на первый элемент. В вашем случае каждый элемент представляет собой fftw_complex, поэтому указатель на первый элемент равен fftw_complex*.
Спасибо. Теперь я понимаю.
fftw_complex, который в основном представляет собойdouble[2]» Это не стандартный тип данных С++.