const int *& 的类型

1,简单介绍

const int * & 类型 , 其实就是 一个 const int * 型的指针,因为&会自动解引用,只不过该指针所指向的值不能被改变,并且指向也不能被改变。
值不能改变是因为有const , const int* c,c解引用出来的值,不能被改变,因为被const修饰是常量。
指向不能改变是因为&,&会自动解引用,并且&一经引用就不能改变,因为&是别名。

不懂的话,让我来为大家解释两个区别。

2,const int * 与 int * const 的区别

(1),const int * p : p的指向可以改变,但p指向的值不能改变,const 在 *p 前面 , 大家可以理解为 const 修饰的 是 *p , 而*p相当于解引用,得到的是p指向的值,被const修饰,不能改变。
(2),int * const p : p指向的值可以改变,但p的指向不能改变,const在p的前面,可以理解为const 修饰的是 p,而p保存的是指向的值的地址,被const修饰不能改变,所以指向不能改变。

3,指针和引用的区别

(1),大家如果看过指针和引用的汇编的话,就会惊奇的发现,引用在汇编上的操作完全就是一个指针实现。

这里写图片描述

可以看到,在汇编上,引用就是一个指针操作,定义了一个引用变量,相当于定义了一个指针,然后把引用变量的地址写到这个指针里面,当通过引用变量修改它所引用的内存时,q = 40;从汇编上可以看到,它访问了指针里面的地址,然后在这个地址的内存里面把值改为40。
(2),指针可以不初始化,并且指针一个地址后,还可以修改指针的指向,指向其他地址;而引用必须初始化,并且引用一经引用,就不能引用其他地址,引用是别名。指针用 *来解引用,而引用可以自动解引用。
(3),sizeof一个指针永远是4个字节,而sizeof引用,因为引用是别名,所以sizeof大小为引用的那块地址的大小。

4,总结

const int *&类型 相当于 const int *c类型,只是加了引用,必须初始化为const int *d型的变量,并且只能指向它,指向的值和指向均不能改变。

猜你喜欢

转载自blog.csdn.net/Xzg_2017/article/details/81096658