2017-10-19 306 views
0

這可能聽起來像以前問的問題 - 有一大堆的問題在那裏大約在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 ** - 它是否會正確索引數組還是不?

+0

你可以發表有問題的線嗎? – Blacksilver

+4

二維數組是**不是**指針數組,這就是爲什麼。 –

+1

'int **'是'int *'的順序列表;一個'int [3] [3]'是一個由3個連續3個列表組成的連續列表。通過解析數組的第一個元素的地址,int []會衰減爲int *',但這不能傳遞。 – zneak

回答

2

雖然有人可以糾正我這一個多維陣列上可能沒有,通常不爲指針數組實現的,它與在它上面的一些syntaxic糖解引用一段連續的內存。

詳見this

+0

謝謝@ orhtej2 - 不知道我錯過了那個答案 - 它完美地回答了我的問題。 –

+0

是的,但「語法糖」,使得它與'INT **' –

+0

@AntonMalyshev我可以看到如何兼容?我提供的鏈接表明否則。 – orhtej2

相關問題