常量指针与指针常量的区别

如题所述

常量指针是指--指向常量的指针,顾名思义,就是指针指向的是常量,即,它不能指向变量,它指向的内容不能被改变,不能通过指针来修改它指向的内容,但是指针自身不是常量,它自身的值可以改变,从而可以指向另一个常量。
指针常量是指--指针本身是常量。它指向的地址是不可改变的,但地址里的内容可以通过指针改变。它指向的地址将伴其一生,直到生命周期结束。有一点需要注意的是,指针常量在定义时必须同时赋初值。

2.使用方法
写法上的区别:
常量指针:const 在*之前 指针常量:const在*之后。
使用举例:
(1) 常量指针使用:
如 int b, c;
int const *a;
a = &b;
a = &c;
都可以,唯独它指向的内容不能被修改。如:*a=20;这是违法的!错误!
(2) 指针常量使用
如 int a ,b;
int * const p = &a;
表示p是一个常量指针它指向变量a的内存。指针常量不能再用p指向其他变量,如 p = &b; 错误!可以修改指向内存的值,如:* p = 20; 指针常量声明的时候必须像上式那样赋初值。
指针常量也不能释放,用p指向NULL,即
p = NULL;
会在编译时报错
/opt/test/test.c:649: error: assignment of read-only variable `p'
还有一个记住他们不同形式的技巧!看const关键字,他后面的不可修改,如int * const a = &b; 后面是a,则说明a不能修改!
int const * a = &b;后面是*a则说明*a不可被修改!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-03-20

常量指针   即:

指针指向的值为常量,  但指针本身为变量。

指针常量  即:

指针指向的值为变量,  但指针本身为常量。


char array[]="abcde";

const char *pArray = array;   //常量指针   合法  定义时赋值
----------------------------------------------------------------

const char *pArray;     //先定义, 

pArray = array; //后赋值。   合法   

*(pArray+1) = 'B' //非法, 指针指向的值为常量, 不可改变。


==================================================

char array[]="abcde";

char *const pArray = array; //指针常量, 即指针是常量, 必须在定义时赋值。

*(pArray+1) = 'B'; //合法 因为指针常量的值是变量,可以被修改。 

char *const pArray;   //这里就报错, 指针常量, 即指针是常量, 必须在定义时赋值。

pArray = array; //这里就报错, 指针常量, 即指针是常量, 必须在定义时赋值, 不能拆开赋值

第2个回答  2011-12-31
常量指针表示指针的值是一个常量,比如int a = 0; int *const ptr= &a;也就是说指针指向的地址是不变的,但是他的内容可变。
指针常量是指指针指向的是一个常量,也就是说指针指向地址的值是不变的。
比如const int *ptr =0;
第3个回答  2011-12-31
以及常对象和常引用、常指针与指针常量定义上的区别,顺便解释一下!谢谢! 1 常量指针!如 int b, c; int * const a = &b; 表示a是一个
相似回答