关于C++ primer(5E) ,2.5处理类型:指针,常量和类型别名的一些个人理解
书中写道类型别名指代的是复合类型或常量,把它用到声明语句中会产生意想不到的后果。
代码如下:
typedef char *pstring;
const pstring cstr = 0;
const pstring *ps;
使用 typedef 关键字将 pstring 定义为 char *类型,注意这里 pstring 并不是变量而是类型别名(pstring指代char *类型)。
代码段1:
const pstring cstr = 0;
分析:采用"从右往左"的方式解读:
首先:定义一个名为cstr的变量(对象)。
其次:该变量为const pstring类型,pstring表示cstr为一个指针,const表示该指针为一个常量,连起来就是"cstr为一个常量指针"。
(const 修饰给定的类型,本例中为修饰pstring,而pstring为一个指针类型,所以const pstring 代表一个指向char的常量指针类型)
代码段2:
const pstring *ps;
分析:采用"从右往左"的方式解读:
首先:定义了一个指针ps。
其次:该指针为const pstring类型,pstring表示指针ps指向一个指针,const表示该指针(被ps指向的指针),为一个常量指针,连起来就是"ps为一个指向指向char类型的常量指针的指针"
(同上:const 修饰给定的类型,本例中为修饰pstring,而pstring为一个指针类型,所以const pstring 代表一个指向char的常量指针类型)
对于通常的指针定义:
int *p1 = nullptr;
int **p2 = 0;
const int *p3 = nullptr;
int * const p4 = 0;
采用"从右往左"的方式解读仍适用:
int *p1 = nullptr;
定义了指针p1,该指针为int类型,所以指针p1:指向int类型对象。(普通指针,指向相应类型对象的指针)
int **p2 = 0;
定义了指针p2,该指针为int *类型,指针p2:指向 “指向int类型对象的指针”。(指向指针的指针)
const int *p3 = nullptr;
定义了指针p3,该指针为const int类型,指针p3:指向int类型常量。
指向常量的指针:不可通过该指针,改变指针所指对象的值。但可以改变指针所存储的地址,是的指针指向其他对象。
int * const p4 = 0;
定义了一个变量(对象)p4,const表示该变量p4为常量,int *为常量p4的类型,指向int变量的指针,p4为:指向int变量的常量指针。
常量指针:该指针为一个常量,我们知道指针存储所指对象的地址,指针的值为一个地址,指针为一个常量就是该地址不能改动,但是可以通过指针改变改地址对应对象的值(改变指针所指对象的值)。
以上为个人对于书中问题的一些理解和相关知识点的回忆,时间仓促,鄙人不才,如果有任何错误还望指出。