zoukankan      html  css  js  c++  java
  • const指针与指向const的指针

    当使用带有const的指针时其实有两种意思。一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容。听起来有点混淆一会放个例子上来就明白了。


          先说指向const的指针,它的意思是指针指向的内容是不能被修改的。它有两种写法。

          const int* p; (推荐)

          int const* p;

          第一种可以理解为,p是一个指针,它指向的内容是const int 类型。p本身不用初始化它可以指向任何标示符,但它指向的内容是不能被改变的。

          第二种很容易被理解成是p是一个指向int的const指针(指针本身不能被修改),但这样理解是错误的,它也是表示的是指向const的指针(指针指向的内容是不能被修改的),它跟第一种表达的是一个意思。为了避免混淆推荐大家用第一种。

          再说const指针,它的意思是指针本身的值是不能被修改的。它只有一种写法

          int* const p=一个地址; (因为指针本身的值是不能被修改的所以它必须被初始化)

          这种形式可以被理解为,p是一个指针,这个指针是指向int 的const指针。它指向的值是可以被改变的如*p=3;

          还有一种情况是这个指针本身和它指向的内容都是不能被改变的,请往下看。

          const int* const p=一个地址;

          int const* const p=一个地址;

          看了上面的内容是不是有点晕,没关系,你不用去背它,用的多了就知道了,还有个技巧,通过上面的观察我们不难总结出一点规律,是什么呢?也许你已经看出来了,什么!竟然没看也来,那只好还得听我唠叨了。这个规律就是: 指向const的指针(指针指向的内容不能被修改)const关健字总是出现在*的左边而const指针(指针本身不能被修改)const关健字总是出现在*的右边,那不用说两个const中间加个*肯定是指针本身和它指向的内容都是不能被改变的。有了这个规则是不是就好记多了。

          什么还是晕,那就看下面的程序,你把它编译一下看看错误提示就明白了。
     1 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int main(int argc, char *argv[])
     6 {
     7     int a=3;
     8     int b;
     9     
    10     /*定义指向const的指针(指针指向的内容不能被修改)*/ 
    11     const int* p1; 
    12     int const* p2; 
    13     
    14     /*定义const指针(由于指针本身的值不能改变所以必须得初始化)*/ 
    15     int* const p3=&a; 
    16     
    17     /*指针本身和它指向的内容都是不能被改变的所以也得初始化*/
    18     const int* const p4=&a;
    19     int const* const p5=&b; 
    20     
    21      p1=p2=&a; //正确
    22      *p1=*p2=8; //不正确(指针指向的内容不能被修改)
    23     
    24      *p3=5; //正确
    25      p3=p1; //不正确(指针本身的值不能改变) 
    26     
    27      p4=p5;//不正确 (指针本身和它指向的内容都是不能被改变) 
    28      *p4=*p5=4; //不正确(指针本身和它指向的内容都是不能被改变) 
    29      
    30     return 0; 
    31 }
    View Code

    转载自:http://www.cnblogs.com/younes/archive/2009/12/02/1615348.html

  • 相关阅读:
    June 26th 2017 Week 26th Monday
    June 25th 2017 Week 26th Sunday
    June 24th 2017 Week 25th Saturday
    June 23rd 2017 Week 25th Friday
    June 22nd 2017 Week 25th Thursday
    2018最佳网页设计:就是要你灵感爆棚!!!
    图片素材类Web原型制作分享-Pexels
    想要打动HR的心,UX设计师求职信究竟应该怎么写?
    【UXPA大赛企业专访】Mockplus:“设计替代开发”将成为现实
    2018年最好的医疗网站设计及配色赏析
  • 原文地址:https://www.cnblogs.com/CnZyy/p/3315728.html
Copyright © 2011-2022 走看看