2011-06-07 83 views
1

我有一个简单的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). 

我的问题:为什么是副本的创建,虽然我在第一循环中的如双* A的地址(如B的情况下) foo()的例子?

+2

第一行代码不能编译。另外,你传递给函数的是两种情况下的指针。在这两种情况下,函数都可以通过这些指针来修改数组。请改善你的问题。 – sellibitze 2011-06-07 13:09:11

+1

在foo的第一个声明中,两个指针都是按值传递的,所以在foo中你将得到A和B的副本。在第二个声明中,A是通过引用传递的,它在引擎之下是一个指向指针的指针,允许你在内部改变A。你是否意识到这一点,或者我误解了你的问题? – 2011-06-07 13:11:22

+0

显示你的foo()方法的代码.. – 2011-06-07 13:19:00

回答

2

FOO作用于A的副本,只有改变为b,保持在离开时FOO()。

你到底在做什么?在两种情况下,对象本身的变化都应在foo以外可见。如果你试图改变指针A的值,它将不会在foo之外被看到 - 指针的副本被传递给函数,当然它仍然指向相同的数组。

+0

我发现我的错误。在foo()里面我交换了指针。在第一种情况下,我仅交换了副本,并且在后来在foo之外操作数组时,对我的结果感到疑惑。尽管如此:感谢您的帮助! – 2011-06-07 13:25:31

1

如果你想传递一个数组引用,你必须使用一个双指针引用的函数:

foo(double** A, double **B); 

double** A=new complex<double>[3];