基础的东西经常不看,也会忘,在看到“引用初始化以后不能被改变 指针可以改变所指的对象”这句话时就理解错了,写下来巩固下。
此处说的“引用初始化以后不能被改变”不是指变量的值不可变,而是指向的变量地址不可变。这个得再去理解下引用的定义。
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 没有改变
原文:https://blog.csdn.net/wu_123_456/article/details/39929003