2012-11-26 70 views
3

可能重複:
Is array name a pointer in C?數組衰減爲指針的情況是什麼?

我只知道一個情況下 當傳遞給函數的數組它們衰變到一個pointer.Can任何人闡述的所有案件中,數組衰變爲指針。

+0

此** **具有要某個地方的某種東西。 –

+1

@ RichardJ.RossIII我不認爲這是重複的,在這裏OP要求提供所有案例的列表,我沒有在那裏看到一個。 –

+1

這不是我知道的任何問題的重複。除非您有充分的理由,否則請停止投票結束。這是一個合法而且很好的問題。 –

回答

12

Ç2011 6.3.2.1 3:

除了當它是的sizeof運算符的操作數時, _Alignof操作者,或一元&操作者,或者是字符串文字用於初始化一個數組, 「類型」數組的表達式被轉換爲類型爲「指針的指針」 類型「指向數組對象的初始元素,而不是左值。

換句話說,陣列通常衰變爲指針。該標準列出了當它們不是時的情況。

有人可能會認爲,當您將數組用作下標(如a[3])時,它們可以用作數組。但是,這裏發生的實際上是:

  • a被轉換爲指針。
  • 下標操作符作用於指針和下標以產生指定對象的左值。 (特別是,a[3]被評價爲*((a)+(3)),即,a被轉換爲指針,3被添加到指針,並且*算子被應用於。)
+0

感謝您的解釋。 – Kul03

+0

我最喜歡的基本數組與指針差異總結來自我的老大學編譯指導老師;她對此也頗感興趣:「指針是一個變量,**擁有一個地址;一個數組很簡單,**是一個地址。」很難做到比這更簡單。 – WhozCraig

+0

@WhozCraig絕對正確,但 - * what *的地址 –

相關問題