什么是数组到指针的衰减?和数组指针有关系吗?
最佳答案
据说数组会“衰变”成指针。声明为 intnumbers[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
信息,而第一个则不会,因为数组参数已衰减到分配给参数。
1 常量 U 应在编译时已知。
关于c++ - 什么是数组到指针的衰减?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34703920/