#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
//方式一 使用指针
void swap1(int* a, int* b) { //指针作为函数的参数
int tmp = *a;
*a = *b;
*b = tmp;
}
//方式二 使用引用
void swap2(int& a, int& b) { //引用作为函数的参数
int tmp = a;
a = b;
b = tmp;
}
//下面两种方法都是在不使用第三个变量的情况下交换两个值
//方式三
void swap3(int& a, int& b) { //引用作为函数的参数
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
//方式四
void swap4(int& a, int& b) { //引用作为函数的参数,这种方式若数值太大容易溢出,不太建议使用
a = a + b;
b = a - b;
a = a - b;
}
int main() {
int x = 10;
int y = 100;
swap1(&x,&y);
printf("第一次调用x:%d,y:%d\n", x, y);
swap2(x,y);
printf("第二次调用x:%d,y:%d\n", x, y);
swap3(x,y);
printf("第三次调用x:%d,y:%d\n", x, y);
swap4(x, y);
printf("第四次调用x:%d,y:%d\n", x, y);
system("pause");
return 0;
}
1)引用在C++中的内部实现是一个常指针
Type& name <==>Type* const name
2)C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。
3)从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间。这是C++为了实用性而做出的细节隐藏,引用实际上有自己的存储空间。