我是靠谱客的博主 安详发带,最近开发中收集的这篇文章主要介绍const的指针和引用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在之前的博客中,简要介绍了c语言和c++中const的用法和不同点,今天给大家详细介绍一下const与指针、引用、形参列表以及返回值相结合的用法。

一、const与指针结合

  1、const int a=10;

      int *p=&a;//  error

    原因:const修饰的是变量a,所以a是一个常量,不可修改,但是可能通过*p操作修改a的值,所以错误

  2、const int a=10;

     const int *p=&a;//  true

    原因:a是常量,*p也无法操作,也就不能改变a的值

   3、 const int a=10;

     int *constp=&a;//  error

    原因:a是常量,第二个式子中,const修饰的是p,意思是p指向a的内存块的指向不变,不能有int b=20;p=&b操作,但是可以通过*p改变a的值,所以错误

   4、const int a=10;

         const int *p=&a;

         int **q=&p;//  error

       原因:可以通过*q改变p的值,**q改变a的值,但是a和*p都是不可变的

   5、int a=10;

        int *const p=&a;

        const int **const q=&p;//  true

      原因:**q和q无法操作,但是可以操作*q,进而改变p的值,也可以通过*p改变a的值

   6、int a=10;

      int *p=&a;

      int *const *q=&p;//  true

      原因:const修饰的是*q,意味着通过*q间接修改p是不能操作的,但是直接修改p是可以的,这两者是不冲突的

   const与二级指针相结合的时候,如果是直接操作,则没有问题。如果是间接操作,则存在风险,需要避免这种风险

  二、const与引用结合

   1、int a=10;

      int &b=a;//  error

     原因:在底层,int &b=a就相当于int *b=a,如果操作&a,就错误了,常量没地址

   2、const int a=10;

      int &b=a;//  error

     原因:a之前有const修饰,不可变,但是可能通过b修改a的值,所以错误

   3、const int a=10;

      int const &b=a;//true

      原因:因为&不参与类型,所以const修饰的是b

   4、const int &b=10;//  true

      原因:在底层,不是直接对立即数取地址,而是先将立即数的值存入临时变量,然后将临时变量的地址传给b

   5、int a=10;

      const int &b=a;// true

      原因:const int &b=a就相当于const int*b=&a,const修饰的是*b

   6、int a=10;

      int *const q=&a;

      int *&p=q;// error

      原因:可以通过*p修改q,但是在第二个式子中q是不可改变的,所以错误

  总结:

  普通引用      引用     普通变量

  普通引用      引用     常量    //错误

  普通引用      引用     立即数  //错误

  常引用        引用    普通变量/常量

  常引用        引用     立即数

三、const与指针、引用、返回值的结合

1、int sum()

{

   int tmp=10;

   return tmp;

}

int main()

{

    int &b=sum();//错误 被调用函数的返回值是一个立即数,而且是由一个寄存器带回的,不能对立即数取地址

    const int &b=sum();//正确  加了const之后变成了常引用

    return 0;

}

2、int* sum()

{

    int tmp=10;

    return tmp;

}

int main()

{

    int *const &p=sum();// 正确

     return 0;

}




最后

以上就是安详发带为你收集整理的const的指针和引用的全部内容,希望文章能够帮你解决const的指针和引用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部