什么是指针衰减数组? [英] What is array to pointer decay?

查看:170
本文介绍了什么是指针衰减数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆