将堆和堆栈上的数组传递给函数

passing array on the heap and on the stack to function

本文关键字:函数 数组 堆栈      更新时间:2023-10-16

我有一个简单的c++问题,涉及将数组传递给函数foo()。假设我有两个阵列A和B:

double* A=new double[3];

double B[3];

当我将两者都传递给功能时

foo(double* A; double *B)

其旨在操纵两个阵列。但是,通过执行

foo(A,B)

foo正在对a的副本执行操作,并且在离开foo()时只保留对B的更改。如果foo被定义为,则情况并非如此

foo(double* &A; double *B).

我的问题是:尽管我像foo()的第一个例子中的double*a一样传递a的地址(就像B的情况一样),但为什么会创建一个a的副本?

foo正在对a的副本执行操作,并且在离开foo()时只保留对B的更改。

你到底在foo里面做什么?在这两种情况下,对对象本身的更改都应该在foo之外可见。如果您试图更改指针A的值,它在foo之外将不可见——指针的副本会传递给函数,但当然它仍然指向同一个数组。

如果要将数组引用传递给函数,必须使用双指针引用:

foo(double** A, double **B);
double** A=new complex<double>[3];