【发布时间】:2011-06-07 13:04:23
【问题描述】:
我有一个关于将数组传递给函数 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() 的第一个示例中,尽管我像 double* A 一样传递了 A 的地址(如 B 的情况),但为什么会创建一个副本?
【问题讨论】:
-
第一行代码没有编译。此外,在这两种情况下,您传递给函数的都是指针。在这两种情况下,函数都可以通过这些指针修改数组。请改进您的问题。
-
在 foo 的第一个声明中,两个指针都是按值传递的,所以在 foo 中,您将拥有 A 和 B 的副本。在第二个声明中,A 通过引用传递,其底层是指向指针的指针,它允许您在 foo 中更改 A。您是否知道这一点,还是我误解了您的问题?
-
显示你的 foo() 方法代码..
标签: c++ arrays memory-management new-operator