簡體   English   中英

無法從int [] []轉換為int **?

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

我在調用方函數中有以下代碼

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[][]會導致您存儲的整數之一被取消引用,從而導致未定義的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM