2014-03-03 234 views
0

我已經閱讀了很多對這個問題的回覆,但是我並沒有理解它,因爲它涉及到我的代碼,所以我必須問清楚,希望澄清。整數指針和'不兼容的指針類型警告'

該程序是我的中期的一個神奇的方形驗證程序,並且代碼正常運行和輸出,但我收到警告,因此我在提交它之前先清理它。實際上有兩個位可以給出警告,但我希望理解第一個將幫助我清理第二個,因爲我想了解不僅僅是粘貼一個答案。

有問題的代碼:

int ms[COLS][COLS] = 
{ 
{16, 3, 2, 13 }, 
{ 5, 10, 11, 8 }, 
{ 9, 6, 7, 12 }, 
{ 4, 15, 14, 1 } 
}; 

const int* msPtr = ms; 

我試圖建立一個恆定的整數指向我的數組,東西的第一個元素我可以傳給功能,這樣他們就可以使用,但不能修改我的數組值。我懷疑我需要「施放」一些東西或者在這裏有一個語法錯誤。

該警告是「參考」const int * msPtr = ms;「[不適合指針類型的初始化]」警告。上面的線。

謝謝你的時間。

回答

1

你可以這樣做:

const int * pointer_to_1st_int_of_ms = &ms[0][0]; 
+0

因此,當我讀到它,它工作順便說一句,我正在製作一個指針,是一個常數整數與地址(&)ms [0] [0]的值。 – PCGameGuy

+0

名稱令人困惑; msPtr應該是int **。 – CFrei

+0

'&ms [0] [0]'返回'int *'。 – alk

1

應該

const int (* msPtr)[COLS] = ms; 

由於MS是二維數組,所以需要2D INT指針。

+0

那麼,這是鑄造msPtr?它似乎沒有爲我工作,但我想我會用它來傳遞整個數組到第二個函數,看看是否有效。 – PCGameGuy

+0

它是一個2D指針,因此您需要使用** msPtr來獲取特定索引的值。 –

+0

也是正確的,但它不是指向第2個數組中的第1個'int'的指針,而是指向第2個數組中的第1個1d數組。 – alk

相關問題