2017-02-24 64 views
0

編輯2:我試圖近似我的實際代碼在這裏,但顯然我錯過了一些東西,因爲這段代碼沒有生成我在實際代碼中得到的警告。我正在結束這件事,直到我能夠找出差異。指向一個二維數組中的數組C

原始的問題

什麼爲2D陣列內指向的數組(行),如下面所示的語法?那麼如何使用行指針訪問其中的單個元素?

int arr[3][4] = 
{ 
    {0, 1, 2, 3}, 
    {4, 5, 6, 7}, 
    {8, 9, 10, 11}, 
}; 

編輯:

如果我做

int const * pRow = arr[1]; 

我得到的編譯器警告

warning C4047: '=': 'const int *' differs in levels of indirection from 'const int (*)[4]' 

是否有一個 「正確」 的方式做到這一點,除了剛纔迫使它與演員?

+2

'arr [n]'有什麼問題? –

+1

@SouravGhosh,指向'arr [n]'的變量的類型是什麼? –

+0

你的意思是指什麼?它與'arr [m]'相同,以防數組被定義爲'arr [n] [m]' –

回答

2

arr[m]是一個int的數組,它作爲所有數組自然衰減爲指向其第一個元素的指針。現在arr[m](即arr[m][0])的第一個元素的類型是什麼?這是一個int對不對?因此arr[m]衰減到指向int的指針,即int*

這意味着你可以這樣做

int *ptr_to_arr_1 = arr[1]; 

您可以使用ptr_to_arr_1任何其他數組或指針。因此,要訪問第二個元素,您有ptr_to_arr_1[1],它與arr[1][1]相同。

+0

這個警告只有意義請參閱我修改後的問題。 –

0

你可以用這個int * ptr_to_row=arr[row_no];

+0

我編輯了關於這個問題。 –

+0

嘗試不用const –

+0

刪除const會添加一個新的警告,'warning C4090:'=':不同的'const'限定符。另外我應該可以有一個指向常量數據的指針,即使數據不是常量,這也意味着我不能通過指針修改它。 –