我有一个关于将数组传递给函数foo()的简单c ++问题。假设我有两个数组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()的第一个例子中,虽然我传递了A的地址,例如double * A(如B的情况),但是创建的副本?
答案 0 :(得分:2)
foo作用于A的副本,并且在离开foo()时仅保留对B的更改。
你到底在foo里做什么?在两种情况下,对象本身的更改应该在foo之外可见。如果您尝试更改指针A的值,它将不会在foo外部显示 - 指针的副本将传递给函数,但当然它仍然指向同一个数组。
答案 1 :(得分:1)
如果要将数组引用传递给函数,则必须使用双指针引用:
foo(double** A, double **B);
double** A=new complex<double>[3];