簡體   English   中英

數組衰減到指針的情況是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM