const关键字
由const修饰的类型只能初始化一次,之后只能读取,不能修改,在java中为final更贴切其本意
const double pi = 3.1415926
引用类型
基本意义
对下面这段代码:
int a = 5;
int &b = a;
设a的地址为0x400000,那么b的准确意义就是,放在0x400000地址上的一个int类型对象。
这里面包括了两重含义:
- b是一个int类型对象,因此他的使用完全与 int类型对象一样。
- 这个int类型对象的地址是0x400000,因此从底层来看,它具有指针的一些特性,无论你怎样传递,他都代表放在 0x400000的那个int
引用与指针的差别
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化。
关于第二点有下列解释:
string str1="a";
string str3="b";
string &str2=str1;
str2=str3;
![](https://img.haomeiwen.com/i17181663/723edec45cedb25f.png)
我们发现对
String&
型变量赋值,str2=str1
使得str2变量作为str1的别名,已经映射了地址OX0030fc4,它不能再映射其它地址
const int&
和int&
int&映射的地址只能有一次,就是上面的第二点,本质上是一个常量指针,指向的地址不能变,内容可变
const int&是在int&的基础上要求引用地址不能变,内容也不可变
const和指针
int*const p;//读作p为常量,是指针,指向int,所以p为指向int的常量指针, p不可修改
int const *p;//p为指针,指向常量,为int,所以p为指向int常量的指针, *p不可修改
int ** const p; //p为常量,指向指针,指针指向int,所以p为指向int型指针的常量指针,p不可修改
int const**p; //p为指针,指向指针,指针指向常量int,所以p为指针,指向一个指向int常量的指针, **p为int,不可修改
int * const *p ; //p为指针,指向常量,该常量为指针,指向int,所以p为指针,指向一个常量指针,*p为指针,不可修改
int ** const *p; //p为指针,指向常量,常量为指向指针的指针,p为指针,指向常量型指针的指针,*p为指向指针的指针,不可修改
int * const **p; //p为指针,指向一个指针1,指针1指向一个常量,常量为指向int的指针,即p为指针,指向一个指向常量指针的指针, **p为指向一个int的指针,不可修改
网友评论