不能从int[][]转换为int**

cannot convert from int[][] to int**?

本文关键字:int 转换 不能      更新时间:2023-10-16

在调用者函数

中有以下代码
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]?

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

在内存中,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**,将导致您正在存储的整数之一被解引用,导致未定义行为。