【问题标题】:c++ function with pointers as argument problem以指针为参数的c ++函数问题
【发布时间】:2019-04-07 20:07:19
【问题描述】:

我在 c++ 中使用 fftw 进行傅立叶变换。有标准的数据类型fftw_complex,它基本上是一个double[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。这没用。该函数表示数组不为空!请帮忙,我做错了什么?

【问题讨论】:

  • "有标准数据类型fftw_complex,基本上就是double[2]"那不是c++标准数据类型。
  • “它不起作用。函数说数组不是空的!请帮忙,我做错了什么?”提供一个minimal reproducible example复制你的请按这里的要求解决问题。

标签: c++ arrays pointers


【解决方案1】:

问题好像是这样的

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,因为变量 given(array) 的类型是 fftw_complex_16?谢谢
  • @TomAtix 在将数组传递给函数时,这只是 C++ 的正常过程。由于您实际上无法将数组传递给函数,因此您可以将指针传递给第一个元素。在您的情况下,每个元素都是fftw_complex,因此指向第一个元素的指针是fftw_complex*
  • 谢谢。我现在明白了。
猜你喜欢
  • 1970-01-01
  • 2016-05-31
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
相关资源
最近更新 更多