很多开发人员选择使用java就是避免C/C++的指针.
而C++里的引用类型就是把C里的指针操作封装起来,避免直接操作内存地址,降低发生地址访问越界的问题.
声明引用类型的变量: 类型& 变量名=要引用的变量名
注意引用变量在声明时必须要初始化,也就是要指定引用的变量.我们只要像操作一般的变量来操作引用变量即可。
代码:
1
2 #include<iostream>
3
4 int main(void)
5 {
6 usingnamespace std;
7 int & p;
8 return 0;
9 }
如上面代码没有初始化引用变量,则编译时发生错误:
[root@localhost02quote]# g++ 01test.cpp
01test.cpp: Infunction ‘int main()’:
01test.cpp:7:8:error: ‘p’ declared as reference but not initialized
int & p;
^
引用变量初始化指定引用变量后,无法再指定引用另一变量.
代码:
1
2 #include<iostream>
3
4 int main(void)
5 {
6 usingnamespace std;
7 int num =77;
8 int num2 =88;
9
10 int & p= num;
11
12 p = num2;
13 cout <<p << endl;
14 cout <<num << endl;
15 return 0;
16 }
这代码看上去,“p = num2”是指定引用另一个变量,实际根本不是。
当p初始化指定引用num变量后, 写p相当于写num,“p = num2”相当于”num= num2”
引用变量作函数的参数使用
通过引用变量参数改变变量num的值
1
2
3 #include <iostream>
4
5 void func(int & p);
6 int main(void)
7 {
8 using namespace std;
9
10 int num = 88;
11
12 func(num);
13 cout << num << endl;
14 return 0;
15 }
16
17 void func(int & p)
18 {
19 p = 11;
20 }
注意引用变量p是局部变量,在func函数执行才会发配空间,也就是在函数执行时才会初始化”int& p = num”
在面试题里,C/C++的题里出现函数参数是引用变量时,需注意不是取地址的参数
调用参数为引用变量的函数时,我们只需提供变量,同时需注意函数有可能改变量里的值.