将表示2D数组的指针传递给C++中的函数

Der*_*rek 4 c++ arrays

http://www.neilstuff.com/guide_to_cpp/notes/Multi%20Dimension%20Arrays%20and%20Pointer%20Pointers.htm

根据这个网站,我应该能够使用以下代码:

double stuff[3][3];
double **p_stuff;
p_stuff = stuff;
Run Code Online (Sandbox Code Playgroud)

但我得到的投诉是转让不允许转让.

难道我做错了什么?

我有一个extern"C"类型的函数,我想通过这个双重的东西[3] [3]来.所以我想我需要把它作为指针,对吧?

Cub*_*bbi 13

关于编辑:将它传递double stuff[3][3]给C函数,你可以

1)传递指向整个2D数组的指针:

void dostuff(double (*a)[3][3])
{
// access them as (*a)[0][0] .. (*a)[2][2]
}
int main()
{
    double stuff[3][3];
    double (*p_stuff)[3][3] = &stuff;
    dostuff(p_stuff);
}
Run Code Online (Sandbox Code Playgroud)

2)传递指向第一个1D数组(第一行)和行数的指针

void dostuff(double a[][3], int rows)
{
// access them as a[0][0] .. a[2][2]
}
int main()
{
    double stuff[3][3];
    double (*p_stuff)[3] = stuff;
    dostuff(p_stuff, 3);
}
Run Code Online (Sandbox Code Playgroud)

3)将指针传递给第一行中的第一个值以及列和行的数量

void dostuff(double a[], int rows, int cols)
{
// access them as a[0] .. a[8];
}
int main()
{
    double stuff[3][3];
    double *p_stuff = stuff[0];
    dostuff(p_stuff, 3, 3);
}
Run Code Online (Sandbox Code Playgroud)

(这最后一个选项不是严格符合标准的,因为它将指针推进到1D数组的元素(第一行)超过该数组的末尾)

如果那不是C函数,还有更多选项!