[英]What are the cases in which arrays decay to pointers?
我只知道一個例子,當數組傳遞給一個函數時,它們會衰變成一個指針。任何人都可以詳細說明數組衰減到指針的所有情況。
C 2011 6.3.2.1 3:
除非它是sizeof運算符,...或一元&運算符的操作數,或者是用於初始化數組的字符串文字,否則將類型為“array of type ”的表達式轉換為類型為“指向類型的指針”的表達式“它指向數組對象的初始元素,而不是左值。
換句話說,數組通常會衰減為指針。 標准列出了他們不這樣做的情況。
有人可能會認為,當您使用下標時,數組就會充當數組,例如a[3]
。 但是,這里發生的事實是:
a
轉換為指針。 a[3]
被評估為*((a)+(3))
。也就是說, a
被轉換為指針,3被添加到指針,並且應用了*****運算符。 ) 注意:C 2011文本包含“ _Alignof運算符”。這在標准的C 2018版本中得到了糾正,我從上面的引用中刪除了它。 _Alignof
的操作數始終是一種類型; 你實際上不能將它應用於一個對象。 因此,C 2011標准將其納入6.3.2.1 3是錯誤的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.