c++动态数组初始化与声明

标签 c++ dynamic-arrays

我有这样的功能:

void findScarf1(bool ** matrix, int m, int n, int radius, int connectivity); 

ma​​in 函数中我创建了二维动态数组来传入这个函数

    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/

相关文章:

C++11:在不知道其容器的情况下存储迭代器

c++ - 最好的 2D c++ API?

C ODBC将sql结果保存在动态数组中

c++ - C++ 编译器中的可变长度数组 (VLA)

c++ - 高斯生成的内核和书中给出的不一样。为什么?

c++ - 为什么 ShellExecuteEx 不返回进程句柄?

c++ - 创建动态分配的数组 C++

multidimensional-array - 系统验证 : associative array of dynamic arrays

c - C 中的 Arraylist 不工作

c++ - 我可以要求 VC++ 链接器忽略未解析的外部吗?