swap(int& num1,int& num2) 应该是swap(int &num1,int &num2) 它的形参是地址值,而语句是交换变量的值。
主函数中x=10,y=15; 把x,y的地址传给函数后交换了它们的值,得到x=15,y=10; 输出就是x:15 y:10.
程序的标准写法:型参实参都使用指针
#include
using namespace std;
void swap(int *p1,int *p2)
{
int tmp=*p1;
*p1=*p2;
*p2=tmp;
}
void main()
{
int x=10,y=15;
int *p1,*p2;
p1=&x;
p2=&y;
swap(p1,p2);
cout<<"x:"<
运行结果如下 x:15y:10.
说明:这个程序关键在于"&"--引用操作符(在这里不是取地址符).
C++的参数传递为按值传递,就是说在调用函数时,程序并不会访问或改变实参的值.只是将实参的值复制到函数对应的存储区.所以如果
将函数定义如下:
void swap(int num1,int num2) //没有了引用操作符
{
int tmp=num1;
num1=num2;
num2=tmp;
}
则函数就不能起到交换两个参数的值的目的了.
如果像楼主那样用引用来定义函数原型就不一样了.因为引用就是变量的一个"外号",名字不一样,但本质是一样的.这就是为什么可以通过该程序正确的达到自己意图的原因了.
x=15 y=10
按引用传递,引用是一个变量的别名
交换的是两个变量的地址,所以后面输出的x,但是它指向了y的地方啊