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

Kul*_*ngh 4 c pointers multidimensional-array

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

Eri*_*hil 14

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是错误的.