什么是阵列的衰减?与数组指针有关系吗?
最佳答案
据说数组会“衰减”到指针中。声明为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/40208323/