关于c语言指针的问题。

const int *p;
p是指向常量的指针变量,还是指针变量是常量?

const int *p这种写法,p是指向const对象的指针。
int * const p这种写法,指针为const,而不是它指向的对象为const。

指向const对象的指针(自以为指向const的指针——语出《C++ Primer》)
怎么写?const double *cptr;
const限定了cptr指向的对象的类型,而并非cptr本身。也就是说,cptr本身并不是const,允许给cptr重新赋值。不能通过cptr的解引用来修改其指向的对象(可以非const)的值。
(1)如果指针指向const对象,则不允许用指针来改变其所指的const值。
(2)把一个const对象的地址赋给一个普通的、非const对象的指针也会导致编译时的错误。
(3)不能使用void*指针保存const对象的地址,而必须使用const void*类型的指针保存const对象的地址。
(4)允许把非const对象的地址赋给指向const对象的指针,此时不能通过指针修改其值的行为都会导致编译时的错误。但是可以通过原变量名来修改其值。不能保证指向const的指针所指对象的值一定不可修改。所以“如果cptr是一个指向const对象的指针,那么*cptr在程序运行期间始终不变”这种说法是错误的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-04
指向常量的指针变量本回答被网友采纳
第2个回答  2010-12-05
前一种,指向常量的指针变量。
第3个回答  2010-12-05
指向“常量”的指针变量,不用通过这个指针改变所指的变量的值,可以通过其他方法
第4个回答  2010-12-05
简单点说,要看p是什么,从右像左看,首先看到*,所以p是一个指针,那么p是个什么样的指针呢?再往左看,看到int,所以p是一个指向整形的指针。再往左,看到const,表示这个p所指向的这个整形是只读的,所以,最后得到的是:p是一个指针,它指向的一个只读的整形常量。这意味着p的指向是可以修改的,但是对于它所指向的那个内存里面的值是不能修改的。
如果是这样:const int * const p, 由于 p直接被const修饰,所以p的指向是不能修改的,而且由于int也有const修饰,所以p所指向的那个整形对象也是不能修改的。
第5个回答  2010-12-05
指向常量的指针
相似回答