(1)const <类型> *<指针变量名>;
该语句的作用是:定义指针变量所指数据值为常量,即:指针变量所指数据值不能改变,但指针变量值可以改变。例如:
float x,y;
const float *p=&x; //定义指针变量p所指数据值*p为常量
*p=25; //错误,p所指变量x数据值不能用*p形式进行改变
p=&y; //正确,可改指针变量p的值
x=25; //正确,变量x的值可以改变
(2)<类型> * const <指针变量名>;
该语句的作用是:定义指针变量值为常量,即:指针变量值不能改变,但指针变量所指数据值可以改变。例如:
float x,y;
float * const p=&x; //定义指针变量p的值为常量
*p=25; //正确,p所指变量x数据值可以用*p形式进行改变
p=&y; //错误,指针变量p的值不能改变
用这种形式定义的指针变量,必须在定义时赋初值。
(3)const <类型> * const <指针变量名>;
该语句的作用是:定义指针变量值为常量,指针变量所指数据值为常量。即:指针变量值不能改变,指针变量所指数据值也不能改变。例如:
float x,y;
const float * const p=&x; //定义指针变量p为常量
*p=25; ` //错误,p所指变量x数据值不能用*p形式进行改变
p=&y; //错误,不能改变指针变量p的值
用这种形式定义指针变量,必须在定义时赋初值。
注意:
(1)因为引用变量类同于指针变量,所以这三种定义形式完全适应于引用类型变量。
(2)定义const类型指针的目的是提高程序的安全性,用const 可限制程序随意修改指针值。
(3)const 指针主要用作函数参数,以限制在函数体不能修改指针变量的值,或不能修改指针变量所指数据值。
关键要看const修饰的是谁
int const const int的写法是一样的
指针的话看const离谁( 是‘*’ 还是‘指针变量名’)比较近就是修饰谁的,比如
const * 表示带*运算对象的是常量,也就是*p 不可变 (暗示p可变,p不带‘*’ 嘛)
* const 变量名 表示变量名是常量 也就是p不可变 (暗示*p可变,const没有修饰‘*“ 嘛)