指针和const

       const float PI=3.14;有了这句定义后,程序中就不允许再对PI重新赋值了,以上语句也可将const和float位置互换,不影响语句的意思。下面来看一下用const来控制指针的情况:

      定义形式: const  int  *p;这种写法中,const关键字控制*p的值不能修改。*p表示指针变量指向的变量,也就是说,用这种方式定义的指针,不允许使用*p的方式修改指向变量的值。

         例如:第一种情况:

            int i=3 ,j;

            int const *p=&i;//这条语句是将*p定义成常量,但p、i并没有定义成常量

           *p=5;//这句语句是错误的,因为不能对常量进行赋值不允许的,编译将不能通过;

      但却可以直接对变量i赋值 接着上面的语句添加这条i=8;语句时,编译可以通过;同时,因为const关键字没控制指针变量p,所以变量p的值(即指针变量所指向的地址)也可以修改,即可让其指向其他变量;p=&j;这条语句也是正确;

                  第二种情况:

           int  i=3,j=4;

           int *  const p=& i;//这条语句是将指针变量p定义成常量(永远指向变量i的地址),  不允许对其进行修改,但*p、i并没有定义成常量;

          注意int *  const p=& i;这条语句不能分开来写像(int *  const p;p=&i;这是错误的,编译不能通过)。

           *p=5;

           p=&j;//这条语句是错误,编译不能通过,此时p已是常量,不允许对其进行复值

       这种情况,关键字const将*和变量p分隔开了。这时,使用const关键字控制变量p,所以变量p的值不允许修改,即该指针为一个指针常量。与数组名相同。

       另外, const int k=3;
                  int *p;
                  p=&k;
                  *p=5;以上语句是不能编译通过的,除非将int *p和p=&k两条语句改成const int *p=&k一条语句。修改后此时,k,*p的值都将不能修改而p却还是可以指向其他变量;

但若改成 const  int( * (const p))=&k此时k,*p,p的值都将不能修改。我相信大家一定都知道原因了吧。因为k是个常量,所以*p也不能修改。

         总结:在用const关键字定义指针常量时,若‘*’在const之后表示将*p定义成了常量(不能修改),而p却可以指向其他地址;若'*'在const之前表示将p定义成了常量(不能修改),而*p的值却可以改变。而对const int  k=3;这条语句只能使用const int * p=&k;或

const  int( * (const p))=&k才能使指针指向常量k的指针空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值