引用的申明:引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。引用的本质是变量内存地址的另一个标签。
int x; //变量的申明 int& r = x; //引用申明,初始话(申明时必须初始化)
引用和指针的区别:
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化。
举个栗子:
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a = 10; 7 double b = 20; 8 //因为C++严格区分大小写,所以a和A是两个不同的值 9 int& A = a; //A是初始化为a的整型引用 10 double& B = b; //B是初始化为b的浮点型引用 11 12 cout <<"a = " << a <<endl; 13 cout <<"A = " << A <<endl; 14 cout <<"b = " << &b <<endl; 15 cout <<"B = " << &B <<endl; 16 return 0; 17 }
结果为:
a = 10 A = 10 b = 0x7ffeee41da90 B = 0x7ffeee41da90
引用做参数:在日常的程序中我们常常把引用作为参数来使用,也是引用的最多的地方。举个栗子:
1 #include <iostream> 2 using namespace std; 3 4 void temp(int& sum) //引用作为参数,是把形参(引用变量)指向实参变量单元来进行计算 5 { 6 sum++; 7 cout <<"&sum = " << &sum <<endl; 8 } 9 int main() 10 { 11 int value = 10; 12 temp(value); 13 cout <<"&value = " << &value <<endl; 14 cout <<"value = " << value <<endl; 15 return 0; 16 }
结果为:
&sum = 0x7ffeb143b758 &value = 0x7ffeb143b758 value = 11
可以发现形参和实参的内存地址是一样的,说明在处理引用变量作为形参的函数时,其实就是在处理实参。
引用作返回值:通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护,另外引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。
1 #include <iostream> 2 using namespace std; 3 4 int arr[5] = { 1,2,3,4,5 }; 5 int& arrchange(int i) //引用作为返回值,函数的功能改变arr的值 6 { 7 return arr[i]; 8 } 9 10 int main() 11 { 12 arrchange(1) = 10; 13 arrchange(4) = 20; 14 for (size_t i = 0; i < 5; i++) 15 { 16 cout << "arr["<< i <<"] = " << arr[i] << endl; 17 } 18 }
结果为:
arr[0] = 1 arr[1] = 10 arr[2] = 3 arr[3] = 4 arr[4] = 20