今天看书看到常量指针发现和我以前看到的常量指针怎么是反的,本来以为书上是错的,然后深究一下。其实都没错,是翻译的方式不同而已,其实指的一个意思。可以划分一下:
指向常量的指针和常量指针为一组说法,常量指针和指针常量为一组说法。
一、pointer to a constant
叫法:有两种不同的叫法也就是第一组中的指向常量的指针,第二组中的常量指针。
形式:
long value = 9999L;
const long *pvalue = &value;
long const *pvalue = &value; //两种写法 意思一样
意义:
- pointer to a constant指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改;
- 指针还可以指向别处,因为指针本身只是个变量,可以指向任意地址;
*pvalue = 8888L; //Error
value = 7777L; //Ok
long number = 8888L;
pvalue = &number; //Ok
二、a constant pointer
叫法:有两种不同的叫法也就是第一组中的常量指针,第二组中的指针常量。(千万不能弄混)
形式:
long value = 9999L;
long *const pvalue = &value;
意义:
- 指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化;
long number = 8888L;
pvalue = &number; //Error
*pvalue = 8888L; //Ok
三、指向常量的常指针
这个倒是没有什么歧义,但是写法上有两种写法
const int *const p;
int const *const p;
意义:
- p是一个指向常量的常量指针,所有信息都是固定不变的,不能改变它指向的内容,也不能改变存储在p中的地址;