开发者社区 问答 正文

什么是阵列衰减?

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

展开
收起
保持可爱mmm 2020-01-15 10:19:22 428 分享 版权
1 条回答
写回答
取消 提交回答
  • 据说数组会“衰减”到指针中。声明为的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

    2020-01-15 10:19:38
    赞同 展开评论
问答地址: