3.5 Const修饰符:const int * ptr与int * const ptr的区别

首先说一下常量.常量是不能够改变的对象,它只能在声明时被初始化.
例如:const int p=10;
那么要声明指向常量对象的指针的时候,必需也要将指定const.
例如:const int * ptr=&p;
这样编译器就能够明确的知道指针指向的是一个常量,那么通过*ptr=...这样的语句是非法的.
那么普通对象能够声明为常量,指针可不可以呢?我们知道,指针也是对象,也是普通的变量,虽然拐个弯造成理解上的困难.在C++中,声明常量类型的指针是类似于这样的语法的:int * const ptr=&p;这样的语法意味着,如果另个对象q(int q=30;),如果写成ptr=&q,那么编译器就会知道这样的操作是要修改一个常量,则必然是违反规则的.也就是说:我们不能改变指针指向的对象的地址.但是如果声明int * const ptr=&q后,出现*ptr=200,这样的语法是可以通过编译器通过的,因为ptr指向的对象不是常量.
通常像"int * const ptr"在函数的形参中用来表示指针不对指向其它对象;而const int * ptr用来表示*ptr的值不能被改变.

另外出现的一种声明:const int * const ptr=&p,这样的语法又表示什么意思呢?呵呵,其实综合上面说的就很清晰了,const int *说明指针指向的是一个常量,int * const ptr说明指针也是常量.

另外书中没有讲的const int p和int const p有没有区别,我方现在VC++的编译器下面是没有区别的.看来,我们只需要单独记忆指针的不同声明就可以了.

转载于:https://www.cnblogs.com/fxwdl/archive/2007/04/07/703888.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值