数组衰减到指针的情况是什么?

时间:2012-11-26 16:33:22

标签: c pointers multidimensional-array

我只知道一个案例  当数组传递给函数时,它们会衰变为指针。任何人都可以详细说明数组衰减到指针的所有情况。

1 个答案:

答案 0 :(得分:13)

C 2011 6.3.2.1 3:

  

除非它是 sizeof 运算符,...或一元& 运算符的操作数,或者是用于初始化数组的字符串文字,有类型   “ type ”数组转换为类型为“指向的指针”的表达式    type “指向数组对象的初始元素,而不是左值。

换句话说,数组通常衰减到指针。该标准列出了时的情况。

有人可能会认为,当您使用下标时,数组就会充当数组,例如a[3]。但是,这里发生的事实是:

  • a转换为指针。
  • 下标运算符作用于指针和下标,以产生指定对象的左值。 (特别是,a[3]被评估为*((a)+(3))。也就是说,a被转换为指针,3被添加到指针,并且应用了*****运算符。 )

注意:C 2011文本包含“ _Alignof 运算符。”这在标准的C 2018版本中已得到纠正,我已从上面的引文中删除它。 _Alignof的操作数始终是一种类型;你实际上不能将它应用于一个对象。因此,C 2011标准将其纳入6.3.2.1 3是错误的。

相关问题