引用做函数参数跟地址传递一样,可以通过形参改变实参。 这里写三个函数,分别为值传递、地址传递、引用传递,对比其中的不同。
#include <iostream> using namespace std; //1、值传递 void swap1(int a, int b) { int temp = a; a = b; b = temp; } //地址传递 void swap2(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } //引用传递,也可以修改实参 void swap3(int& a, int& b) { int temp = a; a = b; b = temp; } int main() { int x = 10; int y = 20; swap1(x, y); cout << "值传递x=" << x << endl; cout << "值传递y=" << y << endl; swap2(&x, &y); cout << "地址传递x=" << x << endl; cout << "地址传递y=" << y << endl; swap3(x, y); cout << "引用传递x=" << x << endl; cout << "引用传递y=" << y << endl; }值传递没有改变a和b的值,地址传递交换了a和b,最后的引用传递又将a和b交换了回来。 为什么引用传递也会改变实参的值? 在调用引用传递函数时,传递参数相当于下面两个步骤:
int &a = x; int &b = y;这样形参a相当于x的别名,对形参的操作本质是在操作实参,所以能对实参产生影响。