【发布时间】:2016-01-04 06:00:02
【问题描述】:
好的,所以我刚开始学习 C++,我发现参数传递的来龙去脉有点令人困惑。我在我的 C++ 书中遇到了以下行;
在 C++ 中,通过引用传递有两种方式:使用指针和使用引用。
然后继续显示一个程序,该程序切换两个 int 值 x 和 y 的值(如下所示)。我想知道,在这种情况下,swap() 函数的参数真的是通过引用传递的吗?我以为它们是按地址传递的,有人告诉我这只是按值传递的一种特殊情况。
//Listing 9.6 Demonstrates passing by reference
#include <iostream.h>
void swap(int *x, int *y);
int main()
{
int x = 5, y = 10;
cout << "Main. Before swap, x: " << x
<< " y: " << y << "\n";
swap(&x,&y);
cout << "Main. After swap, x: " << x
<< " y: " << y << "\n";
return 0;
}
void swap(int *px, int *py)
{
int temp;
cout << "Swap. Before swap, *px: "
<< *px << " *py: " << *py << "\n";
temp = *px;
*px = *py;
*py = temp;
cout << "Swap. After swap, *px: " << *px
<< " *py: " << *py << "\n";
}
【问题讨论】:
-
你应该知道call-by-address和call-by-reference是一样的。
-
swap的参数(指向int的类型指针)当然不是按引用传递,而是按值传递。不过,它们是地址。 -
您需要考虑“通过引用”指的是哪些对象。指针(参数)引用变量,因此您通过引用传递变量,即使引用它们的指针是按值传递的。
标签: c++ parameter-passing