3 - 指针和引用的区别

2020-05-04  本文已影响0人  李伟13

引用是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
与常量引用相似


要点是,不能通过常量引用或指针改变所指对象的值.

我大概懂了.
const 引用如果按照指针那样本该分为对常量的引用常量引用两个部分
但是因为引用本身就必定指向一个对象,所以其实不存在常量引用
.
const 指针分为对常量的指针常量指针
对常量的指针不能通过这个指针改变它所指向对象的值

const int *p

常量指针即不能改变这个指针指向的地址

int *const p;

在读表达式时,从右往左读。

上一篇 下一篇

猜你喜欢

热点阅读