6个回答
展开全部
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在程序运行期间始终不变”这种说法是错误的。
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在程序运行期间始终不变”这种说法是错误的。
展开全部
指向常量的指针变量
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
前一种,指向常量的指针变量。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指向“常量”的指针变量,不用通过这个指针改变所指的变量的值,可以通过其他方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单点说,要看p是什么,从右像左看,首先看到*,所以p是一个指针,那么p是个什么样的指针呢?再往左看,看到int,所以p是一个指向整形的指针。再往左,看到const,表示这个p所指向的这个整形是只读的,所以,最后得到的是:p是一个指针,它指向的一个只读的整形常量。这意味着p的指向是可以修改的,但是对于它所指向的那个内存里面的值是不能修改的。
如果是这样:const int * const p, 由于 p直接被const修饰,所以p的指向是不能修改的,而且由于int也有const修饰,所以p所指向的那个整形对象也是不能修改的。
如果是这样:const int * const p, 由于 p直接被const修饰,所以p的指向是不能修改的,而且由于int也有const修饰,所以p所指向的那个整形对象也是不能修改的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询