2012-12-04 84 views
2

假設我有一個2 d陣列INT M [3] [4] 如果typedef的被定義爲指向一個2 d陣列

typedef int array[4]; 
array *ptr = m; 

是什麼意思?它是指向4個元素的數組嗎?或4個指針的數組?我們,它打印相同的地址。這怎麼可能?

+0

'ptr'是指向數組的指針4 – nhahtdh

+0

cout << ptr或cout << * ptr;但是在我的Ubuntu系統上打印地址。 但是,當我在codepad.org上運行相同的代碼* ptr printf [1,2,3,4]; (m是一個4int {1,2,3,4}的數組,任何人都可以解釋輸出中的差異 –

回答

0

ptr是指向int類型的四個元素的數組的指針。 m是3個元素類型的數組(由int類型的四個元素組成的數組)。爲了給你一張圖片 - m是3個數組類型的數組。這就是當ptr被初始化爲m時的原因 - 沒有問題,因爲作爲數組的m被隱式轉換爲指向該數組中第一個元素的指針。

ptr是指向一組元素的指針。所以這個指針被打印出來。當使用* ptr時 - 你得到一個數組,它又被隱式轉換爲指向數組第一個元素的指針,這又是相同的起點 - 所以你得到相同的值。

由於一切都始於同一點,所以您獲得的價值相同。當一個人在指針上做++時,事情就會開始區分。我會離開你的。

0

查看clockwise/spiral rule。讀完這些後,您可以讀取聲明,作爲指向類型別名array的指針,換句話說,指向一個由四個整數組成的數組的指針。

0

按照「順時針/螺旋規則」ptr是指向4 int數組的指針。