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