值传递:形参是对实参的拷贝,改变形参的值不会改变外部实参的值,从被调用的角度来说,值传递时单向传递(实参->形参),参数的值只能传入,不能传出。
当函数内部需要修改参数,并且不希望这个改变影响调用者时,才用值传递。
引用传递:形参相当于是实参的“别名”,对形参的操作实际上就是对实参的操作。所以被调用函数对形参做的任何操作都会影响主调函数中的实参变量。
#include<iostream> using std::cin; using std::cout; using std::endl; void swap(int a, int b) { int temp; temp = a; a = b; b = temp; } int main() { int x=1;
int y=2; swap(x,y); cout << x<<y << endl; return 0; }
运行上面的代码可以发现x和y的值没有交换。这是因为在主函数main中调用swap是通过值传递方式将x和y的值传递给a和b,在函数swap内部进行的是a和b的交换,并没有交互x和y。也就是值只是传入函数,但是没有传出。
#include<iostream> using std::cin; using std::cout; using std::endl; void swap(int &a, int &b) { int temp; temp = a; a = b; b = temp; } int main() { int x=1; int y=2; swap(x,y); cout << x<<y << endl; return 0; }
运行上面这段代码发现x和y的值进行了交换。这是因为函数swap的形成定义的是引用,在主函数中调用时,将x和a进行了绑定,将y和b进行了绑定,也就是交换a和b就相当于交换x和y.