无法从int [] []转换为int **?

时间:2011-12-02 00:07:19

标签: c++ arrays

我在调用者函数中有以下代码

int matrix[3][3] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};
find_index(matrix);

并且find_index的原型是:

void find_index(int** m);

我遇到编译器错误:无法将'int(*)[3]'转换为'int **'

无论如何我可以解决这个问题?谢谢!

更新

有没有办法可以在第二个函数中使用m [a] [b]运算符而不是传递列号并执行m [a * col_num + b]?

2 个答案:

答案 0 :(得分:5)

双索引数组仍然只对应于单个指针,而不是指向指针的指针。

答案 1 :(得分:4)

在内存中,int**看起来像

[0] ----> [0] ---> int
          [1] ---> int
          [2] ---> int

[1] ----> [0] ---> int
          [1] ---> int
          [2] ---> int

[2] ----> [0] ---> int
          [1] ---> int
          [2] ---> int

int[][]似乎是

[0][1][2][0][1][2][0][1][2]
(0)      (1)      (2)

因此,您可以看到它们如何编制索引会导致不同的事情发生(一个解引用指针,一个执行不同的算法),并且它们不兼容。尝试将int[][]索引为int**会导致您存储的整数之一被取消引用,从而导致未定义的行为。