我有这样的功能:
void findScarf1(bool ** matrix, int m, int n, int radius, int connectivity);
在 main 函数中我创建了二维动态数组来传入这个函数
bool matrix[6][7] = {
{0, 0, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 0, 0}
};
问题是:
findScarf1(matrix, 6, 7, 3, 4);
原因 错误 C2664:“findScarf1”:无法将参数 1 从“bool [6][7]”转换为“bool **”
如何紧凑地初始化数组(与声明同时进行)?
附注抱歉,如果这是重复的问题,但我已经花了 1.5 个小时来解决这个问题
最佳答案
如果您查看数组在内存中的布局方式,并将其与指针到指针“矩阵”的布局方式进行比较,您就会明白为什么不能将矩阵作为指向指针的指针传递。
你的矩阵是这样的:
[ matrix[0][0] | matrix[0][1] | ... | matrix[0][6] | matrix[1][0] | matrix[1][1] | ... ]
A matrix in pointer-to-pointer is like this:
[ matrix[0] | matrix[1] | ... ] | | | v | [ matrix[1][0] | matrix[1][1] | ... ] v [ matrix[0][0] | matrix[0][1] | ... ]
You can solve this by changing the function argument:
bool (*matrix)[7]
这使得参数 matrix
成为一个指向数组的指针,这将起作用。
顺便说一下,您拥有的 matrix
变量不是动态的,它完全由编译器声明和初始化,没有任何动态。
关于c++动态数组初始化与声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17566661/