最近我在C
進行了一次採訪。面試官要求我解釋如何使用double pointer
訪問2D array
中的特定元素 。我給出了答案*(*(a+i)+j)
,其中a
是一個雙指針,i
是行數,j
是列數。後來他讓我用一個例子來解釋。我對*(a+i)
感到困惑,因爲它給出了價值而不是地址,並增加了j
給出了一些垃圾價值。 任何人都可以請解釋。使用雙指針訪問2D數組元素
1
A
回答
5
請記住,在1D陣列a[i]
等於*(a+i)
。 C中沒有2D數組,只是數組的數組。因此a[i][j]
實際上等於*(*(a+i)+j)
。
如果a
的類型是int**
,那麼(a+i)
的類型仍然是int**
,您需要對其進行解引用。 *(a+i)
的類型是int*
,並且*(*(a+i)+j)
的類型是int
。
關於面試問題,不管那個a
是一個雙指針,你仍然應該使用[]
表示法。另一種方法是太麻煩:
int **a = ...;
int x = a[i][j];
2
的A [1] [j]的元素看起來像
一個[i] [j] = *(*(A + I)+ j)的
所以這是一個雙指針,因爲它會先判斷該行,然後列,因爲你可以看到的二維矩陣看起來像
----- _________________
|___| ---> |___|____|____|___|
|___| ---> |___|____|____|___|
|___| ---> |___|____|____|___|
|___| ---> |___|____|____|___|
實際上你可以看到一個維度是另一維矩陣的地址。因此,第一個垂直矩陣數據類型是int**
,因爲它保存了另一個一維的地址,即int*
相關問題
- 1. 使用雙指針創建2d數組
- 2. 使用雙指針聲明2D數組
- 3. 使用指針訪問結構元素
- 4. 訪問雙指針
- 5. 訪問2D數組中的元素
- 6. 使用指針線性訪問2D數組
- 7. 訪問2D數組中元素的精確語法 - 通過指針?
- 8. 訪問2D指針陣列
- 9. 指針,雙指針,數組
- 10. 如何訪問作爲雙指針傳遞的數組的元素?
- 11. 使用雙指針訪問衝突
- 12. 如何使用雙指針分配2D數組?
- 13. 雙指針遍歷並在2D數組中找到5個最大元素。 C
- 14. 使用指針訪問數組
- 15. 優化/使用指針訪問數組
- 16. 指針指針,指向地址值和2D數組訪問的清晰度
- 17. 通過C中的雙指針訪問結構元素
- 18. 二維數組和C中的指針 - 如何訪問元素?
- 19. 訪問類型爲def的指針數組的元素
- 20. 訪問數組元素通過量指針
- 21. 通過指針從C中訪問4d數組中的元素
- 22. C和C++:數組元素訪問指針vs int
- 23. 二維數組指針 - 訪問元素和地址
- 24. 你不能用雙指針引用2d數組嗎?
- 25. 雙星指針指向數組的指針;我如何訪問數組的指針? C++
- 26. 訪問2d數組與指針在c + +中,如何分配地址指針?
- 27. 訪問C++的矢量指針元素
- 28. 訪問指針陣列中的元素
- 29. 如何使用3D char數組調整雙指針2D char數組的大小?
- 30. C++ 2D指針數組
在指針概念中,*(a + i)表示第i行的地址 – WallPoster
*「C中沒有2D數組」 *有些不正確。雙指針'int ** a;'可以作爲二維數組與數組的方法,但'int a [N] [M];'是真正的二維數組。 – user694733
@ user694733:那麼,這是一個定義問題。 'int a [N] [M]'可以被看作是一個2D數組或者是一個由'int [M]'類型的N值組成的數組,這是一個數組數組。其他具有真正二維數組的語言將使用'a [i,j]'而不是'a [i] [j]'。 – rodrigo