注:const :常量,意为不变的量
先看以下定义
A.int const *p;
B.const int *p;
C.int *const p;
D.const int *constp;
E.int const *constp;
以上五种中A和B表示的是指针常量,C、D、E表示的是常量指针
如何划分指针常量和常量指针
技巧:从右往左读,*翻译成pointerto(指向)
例如:A:p is a pointerto const int (p是一个指针指向一个常量)
C:p is a constpointer to int(p是一个指向整数的常量指针)
指针常量和常量指针的区别
I.指针常量
这是一个偏正短语,重点在后面,就是说指针常量就是一个指针所指向常量
例如:
A:p is a pointer to const int (p是一个指针指向一个常量) 重点在常量
,相当于P这个指针指向一个常量,p指向的内存是一个常量,常量不可变,
但p可变,例如这个常量是1,定义一个int const *p=1后,int const = 1,不可变
但分配的地址p是可以改变的。
II.常量指针
是指针
例如:
C:p is a const pointer to int(p是一个指向整数的常量指针) 重点在指针
P是一个常量指针,p是指针,同时p是一个常量,不可变,但 *const p指向的
是一个int ,这个int是可变的。假设系统给*const p分配的地址是 60378F,那么
在接下来的程序执行中,60378F这个地址不会改变,但它指向的int 可以为任意整数
实例演示:
const int a=12; //定义一个常量a
int *p=&a; //定义一个指针指向a
这是个指针常量,此时 p是一个整型指针,它指向一个常量a,等价于 const int *p =&a;
注意 a是常量,a的值不可变;
int a =12;
int const *p=&a;
这个也是个指针常量
等价于int const *p=&a;
int a =12;
int *const p=&a;
常量指针。