指针常量和常量指针

来源:互联网 发布:巴西农业部数据 mapa 编辑:程序博客网 时间:2024/05/19 12:18

请问下面的两行代码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;

0 0