gpt4 book ai didi

c++ - 什么是数组到指针的衰减?

转载 作者:行者123 更新时间:2023-11-30 17:13:25 26 4
gpt4 key购买 nike

什么是数组到指针的衰减?和数组指针有关系吗?

最佳答案

据说数组会“衰变”成指针。声明为 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/30861253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com