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

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

C 2011 6.3.2.1 3:

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

换句话说,数组通常会衰减为指针。 标准列出了没有的情况

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

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