gpt4 book ai didi

c++ - 通过引用数组传递堆栈分配的参数

转载 作者:行者123 更新时间:2023-11-28 05:23:28 25 4
gpt4 key购买 nike

我有一个函数 void theFunc(int num&, int* array) 通过引用接收一个 int 和一个数组指针

theFunc(int num&, int* array)
{ array[0] = num;
}

这只是一个例子,所以这个函数做了一些简单的事情

int main()
{ int k = 3;
int* theArray = new int[5];
theFunc(k, theArray);

delete[] theArray;
return(0);
}

我的问题是 k,一个堆栈分配的 int 实例,如何通过引用传递给 theFunc 并存储在一个动态存储的数组中。我知道对象/参数不能只在堆栈和堆之间移动,因为它们具有特定的存储内存地址。我想了解为什么会这样,以及幕后发生了什么(如果在这种情况下与按值传递有区别的话)。

谢谢!

最佳答案

简短的回答是 k 没有被“存储”在动态分配的数组中。相反,当您编写 int *theArray = new int[5] 时,您正在分配一 block 内存,可以容纳五个整数的数组。事实上,它已经确实拥有五个整数:没有做任何其他事情,theArray[0] 是一个有效的表达式,即它是一个整数,尽管它的值可能是 -32,768 或类似的东西。当您调用 theFunc 并引用 k 时,您正在将 theArray[0] 的值更改为 k通过复制赋值,因此您将k 的值赋给数组的第一个元素。你没有存储任何新东西,你只是在改变已经存储的东西的值(value)。

确实,在这种特殊情况下,通过引用传递 num 不会有任何好处或损失。如果函数是按值传递的,那么所写函数的可观察行为将是相同的。

关于c++ - 通过引用数组传递堆栈分配的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41007659/

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