当数组传递给函数时,我只知道一种情况,它们会衰减为指针。任何人都可以详细说明数组衰减为指针的所有情况。
问问题
252 次
1 回答
13
C 2011 6.3.2.1 3:
除非它是sizeof运算符的操作数,...或一元&运算符,或者是用于初始化数组的字符串文字,否则类型为“类型数组”的表达式将转换为类型为“类型指针”的 表达式” 指向数组对象的初始元素,不是左值。
换句话说,数组通常衰减为指针。该标准列出了没有的情况。
有人可能会认为,当您将数组与下标一起使用时,它们就像数组一样,例如a[3]
. 然而,这里发生的实际上是:
a
转换为指针。- 下标运算符作用于指针和下标以产生指定对象的左值。(特别是,
a[3]
被评估为*((a)+(3))
。即a
转换为指针,将 3 添加到指针,并应用 ***** 运算符。)
注意:C 2011 文本包括“ _Alignof运算符”。这在标准的 C 2018 版本中得到了纠正,我已经从上面的引用中删除了它。的操作数_Alignof
始终是类型;您实际上无法将其应用于对象。因此,C 2011 标准将其包含在 6.3.2.1 3 中是一个错误。
于 2012-11-26T16:38:06.920 回答