我在调用者函数中有以下代码
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]?
答案 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**
会导致您存储的整数之一被取消引用,从而导致未定义的行为。