1、引用变量
&作用:
1,取地址
2,声明引用
声明引用使用方法:
int rats = 101;
int & rodents = rats;
rodents 是 rats的别名。
demo:
#include <iostream>
int main() {
using namespace std;
int rats = 101;
int & rodents = rats;
cout << "rats = " << rats;
cout << ",rodents = " << rodents << endl;
cout<< "rats address = " << &rats;
cout << ",rodents address = " << &rodents << endl;
rodents++;
cout << "rats = " << rats;
cout << ",rodents = " << rodents << endl;
rats++;
cout << "rats = " << rats;
cout << ",rodents = " << rodents << endl;
return 0;
}
2、引用&指针
1、引用在声明时必须初始化,下面这种写法是错误的。
2、引用接近于const指针
int & rodents = rats;
int * const pr = &rats;
rodents 和 *pr相同。
demo演示:
#include <iostream>
int main() {
using namespace std;
int rats = 101;
int *prats = &rats;
int & rodents = *prats;
cout << "rats = " << rats;
cout << ",rodents = " << rodents;
cout << ",prats = " << *prats << endl;
cout<< "rats address = " << &rats;
cout << ",rodents address = " << &rodents;
cout << ",prats address = " << prats << endl;
int bunnies = 200;
prats = &bunnies;
cout << "rats = " << rats;
cout << ",rodents = " << rodents;
cout << ",prats = " << *prats << endl;
cout<< "rats address = " << &rats;
cout << ",rodents address = " << &rodents << endl;
cout << ",prats address = " << prats << endl;
int a = 1000;
rodents = a;
cout << "rats = " << rats;
cout << ",rodents = " << rodents;
cout << ",prats = " << *prats << endl;
cout<< "rats address = " << &rats;
cout << ",rodents address = " << &rodents << endl;
cout << ",prats address = " << prats << endl;
return 0;
}
引用-函数参数
允许被调用函数直接修改调用函数传递的变量的值。C++新增的这项特性是对C的超越,C语言只能按值或者指针传递。
demo:
#include <iostream>
void swapr(int &a, int &b);
void swapp(int *p, int *q);
void swapv(int a, int b);
int main() {
using namespace std;
int wallet1 = 100;
int wallet2 = 200;
cout << "wallet1 = " << wallet1;
cout << ", wallet2 = " << wallet2 << endl;
cout << "Using references to swap: \n";
swapr(wallet1, wallet2);
cout << "wallet1 = " << wallet1;
cout << ", wallet2 = " << wallet2 << endl;
cout << "Using pointers to swap: \n";
swapp(&wallet1, &wallet2);
cout << "wallet1 = " << wallet1;
cout << ", wallet2 = " << wallet2 << endl;
cout << "Using values to swap: \n";
swapv(wallet1, wallet2);
cout << "wallet1 = " << wallet1;
cout << ", wallet2 = " << wallet2 << endl;
return 0;
}
void swapr(int &a, int &b) {
int temp;
temp = a;
a = b;
b = temp;
}
void swapp(int *p, int *q) {
int temp;
temp = *p;
*p = *q;
*q = temp;
}
void swapv(int a, int b) {
int temp;
temp = a;
a = b;
b = temp;
}
输出:
const+引用
摘自C++ primer plus