请问下面的两行代码p有什么区别?
int* const p1 = &i;
constint *p1 = &i;
我们的测试代码如下:
#include<stdio.h>
int main()
{
inti = 10;
inta = 3;
int* const p = &i;
constint *p1 = &i;
p= &a;
*p= a;
p1= &a;
*p1= a;
getchar();
}
编译过程为:
错误 error C2166: 左值指定 const 对象
错误 error C2166: 左值指定 const 对象
指针常量和常量指针:
代码1中的p是不可以改变地址的指针,但是所指向的内容可以修改,叫做指针常量;
代码2中的p所指向的内容是不能改的,但是本身却是可以修改的,叫做常量指针。
如何从概念上区分:
我认为要区别指针常量和常量指针很容易,只要知道是谁修饰谁就好啦!比如说“指针常量”,意思是:指针是一个常量;“常量指针”的主体是一个指针,但是是指向常量的指针。所以对应了两个特性,那就是“指针常量”是一个常量,不能修改;“常量指针”是一个指针,但是指向的值不能够修改。
如何在代码上区分:
我觉得直接看const后面修饰的是什么就可以了。
int * const p = &i; p就是一个指针,且是个常量。因此p = &a;就是非法操作。
const int *p = &i; 那么就是*p为一个常量,但是指针p本身是可变的。因此*p = a就是非法操作。
两者合体:
那么一个变量,同时是常量指针和指针常量呢?那么只要用两个const就可以了吧?综合上面两个的定义,我觉得在只要这样就可以啦~~~
const int * const p1 = &i;