您的位置:首页 > 其它

指针常量和常量指针

2014-02-21 15:07 260 查看
请问下面的两行代码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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: