创建变量的引用:int &a = b;
引用变量a是变量b的别名;对引用操作和对变量本身操作完全相同
注意:与typedef的区别:
typedef对数据类型起别名,&对变量起别名
比如:int num=100;
对int起别名用typedef
对num起别名,用&
注意:引用必须在定义时同时初始化,初始化后绑定的变量不能修改
int a = 100; const int& b = a;//常引用 //int const & b=a; 与上面等价 //不能通过常引用b来修改变量值 //b = 50; 错 a = 50; //普通引用只能用作左值;常引用也叫万能引用,左值右值都可以 //int& i = 111; 普通引用--错 const int& i = 111;
int a[3] = { 10,20,30 }; int(&aa)[3] = a;//数组的引用
#include <iostream> using namespace std; int add(int a, int b) { return a + b; } int main() { int(&f)(int, int) = add;//函数的引用 int x = f(10, 20); cout << x << endl; return 0; }
主要用途一:用作函数的形参,通过将引用变量用作参数,函数将使用原始数据而不是其拷贝
void swip(int &a, int &b) //a是i的引用,a和i的数据地址相同;b是j的引用,b和j的数据地址相同 { int s; s = a; a = b; b = s; } int main() { int i = 100; int j = 10; swip(i, j);//ab数据交换后,ij的数据也就交换了 cout << "i="<<i << endl; cout << "j=" << j << endl; }
用途二: 返回值引用
#include <iostream> using namespace std; struct A { int data; int& func(void) { return data; //返回变量data的引用 //返回值变成了左值 } }; int main() { A a = { 105 }; cout << a.data << endl; a.func() = 200; //a.func()是a.data的引用,a.func()是a.data的别名 //所以这句是修改a.data的值 cout << a.data << endl; return 0; }
引用的本质就是指针