一分钟搞清C++中的指向常量的指针和常量型指针
C++中,指向常量的指针和常量型指针很容易搞混和记错。为了记忆,今天特此记录下来,以便以后查看。
1. 指向常量的指针(point to const):
(1)定义:通常是指向常量的指针,也就是指针指向的内容是个常量。
(2)格式:定义格式例如:const double * ptr 或者double const * ptr形式。样例代码如下:
(3)特点:指针所指内容不可更改,指针地址可以更改
const double pi1 = 3.14; //pi1是个常量,它的值不能改变 const double pi2 = 3.1415; //pi2是个常量,它的值不能改变 double* ptr = &pi1; //错误:ptr作为普通指针,不能被初始化为一个指向常量的指针。 const double* ptrpi1 = &pi1; //正确:ptrpi1指向了常量pi1 double const* ptrpi2 = &pi1; //正确:ptrpi2指向了常量pi1 ptrpi1 = &pi2; //正确:常量指针的指针地址可以更改 *ptrpi1 = 3.1415; //错误:不能修改指针所指内容的值。
2. 常量型指针 (const point):
(1)定义:通常就是指指针本身存放的地址是常量,地址所指的内容未做限定。
(2)格式:例如:double * const ptr
(3)特点:a. 指针本身地址不可更改,指针所指内容可以更改
b. 必须定义时初始化,初始化之后,不能修改
double price = 0.5; double* const ptrPrice = &price; //ptrPrice将一直指向price,指针地址不能修改 *ptrPrice = 0.7; //正确:指针的所指的内容可以修改
3. 如果想定义一个所指内容和指针地址都不能修改的指针变量怎么定义呢?
const double pi = 3.14; const double* const ccpi = π //ccpi是一个指向了常量内容的常量型指针。
4. 规律与总结
const在不同的位置,代表的意思就不同,很容易搞混,那么有没有有规律的办法来理解和记忆呢?有,这就是从右向左或逆序理解法,就是从指针变量名开始,最靠近变量名的符号影响变量本身的类型,其余部分,确定着变量所指向内容的类型。
例如: 第3个例子中,最靠近ccpi的是const,那么就是说ccpi本身是个常量,紧接着是*,说明,ccpi是个常量型指针,double就是这个指针常量所指内容是double类型,最左边的const就是说指针常量所指内容就是double类型的常量值。
作者:MarkKang
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。