什么是阵列的衰减?与数组指针有关系吗?

最佳答案

据说数组会“衰减”到指针中。声明为int numbers [5]的C ++数组无法重新指向,即您不能说numbers = 0x5a5aff23。更重要的是,术语“衰减”表示类型和尺寸的损失。 numbers通过丢失尺寸信息(计数5)衰减为int*,并且类型不再是int [5]。在此处查找cases where the decay doesn't happen

如果要按值传递数组,则实际上是在复制指针-将指向数组第一个元素的指针复制到参数(其类型也应为数组元素类型的指针)。这是由于数组的衰减特性而起作用的。一旦衰减,sizeof就不再给出完整数组的大小,因为它实际上成为了指针。这就是为什么(除其他原因外)首选通过引用或指针传递。

传递数组1的三种方法:

void by_value(const T* array)   // const T array[] means the same
void by_pointer(const T (*array)[U])
void by_reference(const T (&array)[U])


最后两个将提供正确的sizeof信息,而第一个将不提供信息,因为array参数已衰减为可分配给该参数。

1常数U应该在编译时已知。

关于c++ - 什么是阵列衰减?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30861253/

10-10 17:02