什么是阵列的衰减?与数组指针有关系吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
据说数组会“衰减”到指针中。声明为的C ++数组int numbers [5]无法重新指向,即您不能说numbers = 0x5a5aff23。更重要的是,术语“衰减”表示类型和尺寸的损失。numbers会int*因丢失尺寸信息(计数5)而衰减,类型不再存在int [5]。在这里寻找不发生衰减的情况。
如果要按值传递数组,则实际上是在复制指针-将指向数组第一个元素的指针复制到参数(其类型也应该是数组元素类型的指针)。这是由于数组的衰减性质而起作用的。一旦衰减,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在编译时应该是已知的。
问题来源于stack overflow