一个小实验。
#include<iostream> using namespace std; //互换值 改变地址 相当于引用 void prswap(int* &x, int* &y) { int temp = *y; *y = *x; *x = temp; x++; } //互换值 地址不变 void pswap(int *x, int *y) { int temp = *y; *y = *x; *x = temp; x++; } int main() { int a = 3, b = 5; int* x = &a, * y = &b; cout << a << " " << b << " " << x << endl; //prswap(x, y); pswap(x, y); cout << a << " " << b << " " << x << endl; return 0; }🙇感谢xixi。 另外的实验。关于引用的指针,以及函数内交换的方式。
&(引用号)用引用的方法操作实参,形参(=新名字)的行为完全等价于实参的行为
创建指针实参的“副本”——指针形参,可以交换实参的值,但不改变实参指向的地址
创建指针实参的“副本”——指针形参,不可以交换实参的值,当然也不改变实参指向的地址
用引用的方式操作指针实参,可以交换实参的值,但不改变实参指向的地址
用引用的方式操作指针实参,可以交换实参的值,可以改变实参指向的地址
总结:
引用不是创建新的对象,只是给原来对象贴上新名字的标签,故新名字的行为完全等价于原来对象的行为区分传参形式的不同:void swap(int &a, int &b)、void swap(int* x, int* y)、void swap(int* & x, int* & y)区分交换语法的不同: int temp = *x ; *x = *y ; *y = temp;(交换值) int* temp = x ; x = y ; y = temp;(交换指针)