【问题标题】:Difference between double ** and double (*)[2] in CC中双**和双(*)[2]之间的区别
【发布时间】:2012-03-09 11:13:50
【问题描述】:

双 ** 和双 (*)[2] 有什么区别。

如果我理解得很好,double ** 是指向 double 指针的指针,因此它可以是任意大小的二维数组,而 double (*)[2] 是指向 double[2] 数组的指针.

那么如果是对的,如何才能成功的传递给一个函数呢。

例如:

void pcmTocomplex(short *data, double *outm[2])

如果我将双 (*)[2] 作为参数传递,我会收到以下警告:

warning: passing argument 2 of ‘pcmTocomplex’ from incompatible pointer type
note: expected ‘double **’ but argument is of type ‘double (*)[2]’

将双精度 (*)[2] 传递给函数的正确方法是什么?

编辑:调用代码

fftw_complex        *in;             /* typedef on double[2] */
in = (fftw_complex *) fftw_malloc(sizeof(fftw_complex) * 1024);

pcmTocomplex(data, in);

【问题讨论】:

标签: c++ c gcc gcc-warning


【解决方案1】:

double *outm[2]double (*outm)[2] 不同。第一个是指针数组(在这种情况下相当于double **);第二个是指向数组的指针。

如有疑问,请使用cdecl

【讨论】:

    【解决方案2】:

    您需要将第二个参数类型更改为:

    void pcmTocomplex(short *data, double (*outm)[2])
    

    注意第二个参数改为double (*outm)[2]

    另请注意,在您的代码中,参数中的double *outm[2] 完全double **outm 相同。

    【讨论】:

      【解决方案3】:
      void pcmTocomplex(short *data, double *outm[2])
      

      你在这个函数原型中看到的第二个参数暗示了双指针数组,实际上并不是你想要的。

      void pcmTocomplex(short *data, double (*outm)[2])
      

      这应该是你想要的样子,你期望的样子。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-07
        • 2012-03-30
        • 2013-04-19
        • 1970-01-01
        • 1970-01-01
        • 2016-04-14
        • 2011-04-03
        相关资源
        最近更新 更多