指针常量和常量指针

2021-12-15  本文已影响0人  zhengaoly
(1)const int p; 

(2)const int* p; 

(3)int const* p; 

(4)int * const p;

(5)const int * const p;

(6)int const * const p;

第一种是常量整数,没什么好说的。

后面五种是指针,有一个简便的办法记忆。

从右往左读,遇到p就替换成“p is a ”遇到*就替换成“point to”。

比如说,

(2)读作:p is a point to int const p是一个指向整型常量的指针(常量指针)。

(3)读作:p is a point to const int.意思跟(2)相同。

(4)读作:p is a const point to int.p是一个指针常量,指向整型。

(5)读作:p is a const point to int const.

(6)读作:p is a const point to const int.(5)和(6)的意思相同,p都是指向常量的指针常量,指向整型。

这种方法来源于《c primer plus》,这里也向c初学者推荐此书。

指针常量

落点在常量上,这说明了指针常量是一个常量,类型是指针类型。 如果写int const a = 5那么a就是一个整型常量(尽管我们一般不是这么描述),所以指针常量应该如下定义,

int *const p = #

p is a const point to int

p是一个const指针(地址不可变,即不可以更改地址),指向int变量

从右向左看,离p最近的是const,首先说明了p是一个常量。在这里,const是一个顶层const因为它本身是一个常量,我们初始化的时候将p指向num,完成了初始化, 所以常量p不能在指向其他的变量(或是常量),也就是说们再写p = &num2;编译是不会通过的。

常量指针

落点是指针,说明常量指针是一个指针,不同的是它指向的是一个常量。

const int a = 5;
const int * p = &a;

从右向左看首先是一个*(指针的标志),首先说明p是一个指针,再向左看,是一个指向常量的指针,
所以p指向的是一个常量我们就不能更改*p的值,但是p本身不是一个常量所以我们可以改变p 指向的变量。

int const *p = &a;
需要注意的是这还是一个常量指针,从右向左看与上面的结果是一致的。

*p = 6(不合法)

int b = 6;
p=&b;(合法)
上一篇 下一篇

猜你喜欢

热点阅读