這可能聽起來像以前問的問題 - 有一大堆的問題在那裏大約在C數組和指針的區別,但它們都沒有提供相當足夠的信息來回答這個問題。我知道一個C數組的名稱被C編譯器視爲一個指向內存塊開始的指針,但是當我嘗試將一個3x3的二維數組的名稱賦值給int **
在我的克利翁IDE,它凸顯了分配,並說:C:爲什麼將整數的二維數組分配給int **會導致CLION突出顯示該行?
不兼容的指針類型 '詮釋*' 和 'INT [3] [3]'
int x[3][3];
int **px = x; <-- warning here
我可以投的分配值(int **),當然高光消失,但 - 嘿 - 你可以施放C中的很多東西,並獲得亮點消失。這並不意味着你要求的東西會起作用。
這只是一個克利翁(或者可能更恰當,鏗鏘整齊)的問題,或者是一個真正的問題?
[編輯]
對於某些情況下,對陣列/指針差異,所有其他的答案的問題是,很多人說這樣的話「,因爲一個3x3的陣列是不是INT **,這就是爲什麼! 「謝謝,但這是一個相當無用的信息 - 提出問題的人可能已經知道3x3數組不是int ** - 問題是編譯器如何在賦值之後處理結果int ** - 它是否會正確索引數組還是不?
你可以發表有問題的線嗎? – Blacksilver
二維數組是**不是**指針數組,這就是爲什麼。 –
'int **'是'int *'的順序列表;一個'int [3] [3]'是一個由3個連續3個列表組成的連續列表。通過解析數組的第一個元素的地址,int []會衰減爲int *',但這不能傳遞。 – zneak