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++的编译器下面是没有区别的.看来,我们只需要单独记忆指针的不同声明就可以了.

posted @ 2007-04-07 15:18  吴东雷  阅读(867)  评论(0编辑  收藏  举报