什么是指针衰减数组? [英] What is array to pointer decay?
问题描述
什么是指向指针衰减的数组?与数组指针有关系吗?
What is array to pointer decay? Is there any relation to array pointers?
推荐答案
据说将数组衰减"到指针中.声明为int numbers [5]
的C ++数组无法重新指向,即您不能说numbers = 0x5a5aff23
.更重要的是,术语衰减"表示类型和尺寸的损失. numbers
通过丢失尺寸信息(计数5)衰减为int*
,并且类型不再是int [5]
.在此处查找不会发生衰减的情况.
It's said that arrays "decay" into pointers. A C++ array declared as int numbers [5]
cannot be re-pointed, i.e. you can't say numbers = 0x5a5aff23
. More importantly the term decay signifies loss of type and dimension; numbers
decay into int*
by losing the dimension information (count 5) and the type is not int [5]
any more. Look here for cases where the decay doesn't happen.
如果要通过值传递数组,则实际上是在复制指针-将指向数组第一个元素的指针复制到参数(其类型也应为数组元素类型的指针).这是由于数组的衰减特性而起作用的.一旦衰减,sizeof
就不再给出完整数组的大小,因为它实际上成为了指针.这就是为什么(除其他原因外)首选通过引用或指针传递.
If you're passing an array by value, what you're really doing is copying a pointer - a pointer to the array's first element is copied to the parameter (whose type should also be a pointer the array element's type). This works due to array's decaying nature; once decayed, sizeof
no longer gives the complete array's size, because it essentially becomes a pointer. This is why it's preferred (among other reasons) to pass by reference or pointer.
三种传递数组的方法 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参数已衰减为可分配给该参数.
The last two will give proper sizeof
info, while the first one won't since the array argument has decayed to be assigned to the parameter.
1常数U应该在编译时就知道了.
这篇关于什么是指针衰减数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!