基础的东西经常不看,也会忘,在看到“引用初始化以后不能被改变 指针可以改变所指的对象”这句话时就理解错了,写下来巩固下。
此处说的“引用初始化以后不能被改变”不是指变量的值不可变,而是指向的变量地址不可变。这个得再去理解下引用的定义。
1.定义回顾
引用——引用就是某一变量(对象)的一个别名,对引用的操作与对变量直接操作完全一样。
作为目标变量的别名,对引用的任何操作都等价于对目标变量的操作,同时,声明一个引用,并不是新定义了一个变量,只表示该引用名是目标变量名的一个别名, 因此引用本身不占存储单元,编译器不会给引用分配存储单元。所以对引用的取地址,返回结果即是目标变量的内存地址。
2.代码
int num1 = 10;
int num2 = 100;
int &hnum = num1;
int *pnum = &num1;
cout<<"num1="<<num1<<",&num1="<<&num1<<endl;
cout<<"hunm="<<hnum<<",&hnum="<<&hnum<<endl;
cout<<"*pnum="<<*pnum<<",pnum="<<pnum<<endl;
hnum = num2;
pnum = &num2;
cout<<"num1="<<num1<<",&num1="<<&num1<<endl;
cout<<"hunm="<<hnum<<",&hnum="<<&hnum<<endl;
cout<<"*pnum="<<*pnum<<",pnum="<<pnum<<endl;
3.截图结果
4.一道面试题
string s1(\"Nancy\");
string s2(\"Clancy\");
string& rs = s1; // rs 引用 s1
string *ps = &s1; // ps 指向 s1
rs = s2; // rs 仍旧引用s1
// 但是 s1的值现在是\"Clancy\"
ps = &s2; // ps 现在指向 s2;// s1 没有改变