006_linuxC++之_引用
1. 什么是“引用”?申明和使用“引用”要注意哪些问题?
答:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。
(一)直接看代码
(二)使用符号"&"进行引用,在这里不是取址的意思
2. “引用”与指针的区别是什么?
指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;
而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。此外,就是上面提到的对函数传ref和pointer的区别。
1 #include <iostream> 2 using namespace std; 3 int add(int a){ 4 a = a + 1; 5 return a; 6 } 7 int add(int *a){ 8 *a = *a + 1; 9 return *a; 10 } 11 int add_ref(int &b){ 12 b = b + 1; 13 return b; 14 } 15 int main(int arg,char ** argv){ 16 int a = 99; 17 int &c = a; /*使用符号&来进行引用,引用之后c++就相当于a地址中的数进行a++*/ 18 cout<<add(a)<<endl; /*传入的是参数*/ /*a = 99*/ 19 cout<<"a = "<<a<<endl; /*a = 99*/ 20 21 cout<<add(&a)<<endl; /*传入的地址*/ /*a = 100*/ 22 cout<<"a = "<<a<<endl; /*a = 100*/ 23 24 cout<<add_ref(a)<<endl; /*引用*/ /*a = 101*/ 25 cout<<"a = "<<a<<endl; /*a = 101*/ 26 27 c++; /*a = 102*/ 28 cout<<"a = "<<a<<endl; /*a = 102*/ 29 cout<<"c = "<<c<<endl; /*a = 102*/ 30 return 0; 31 }