引用是refer to
指针是point to
指针和引用均为复合类型
指针本身为一种对象
引用就是一个对象的别名
-
引用不可以为空,但指针可以为空。
-
引用不可以改变指向;但是指针可以改变指向,而指向其它对象
-
引用的大小为所指对象的大小,指针是指针本身的大小.
-
指针占内存空间,引用不占内存空间
https://blog.csdn.net/lyd_253261362/article/details/4323691
★ 相同点:
1. 都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
★ 区别:
1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;
4. 引用没有 const,指针有 const,const 的指针不可变;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为成员时,其占用空间与指针相同(没找到标准的规定)。
7. 指针和引用的自增(++)运算意义不一样;
★ 联系
1. 引用在语言内部用指针实现(如何实现?)。
2. 对一般应用而言,把引用理解为指针,不会犯严重语义错误。引用是操作受限了的指针(仅容许取内容操作)。
<2.4.1> const的引用
"对常量(const)的引用" 常简称为 "常量引用"(相较于指针const的两种形式)
const int ci = 1024;
const int &r1 = ci;
常量引用可以指向变量,但是不可以通过常量引用修改变量的值.
int i = 42;
int &r1 = i;
const int &r2 = i;
r1 = 0;
r2 = 0;//错误
<2.4.2>指针和const
与常量引用相似
![](https://img.haomeiwen.com/i5204457/92bf348a15b648c6.png)
要点是,不能通过常量引用或指针改变所指对象的值.
我大概懂了.
const 引用如果按照指针那样本该分为对常量的引用
、常量引用
两个部分
但是因为引用本身就必定指向一个对象,所以其实不存在常量引用
.
const 指针分为对常量的指针
、常量指针
对常量的指针不能通过这个指针改变它所指向对象的值
const int *p
常量指针即不能改变这个指针指向的地址
int *const p;
在读表达式时,从右往左读。
网友评论