• C语言--const修饰指针解析


          这种例子在我们平时编程时可能会很少用,但是在面试时被问的可能性就很大了。

    用const修饰指针,常见的情况可以分为四种:

    1.const int *p; // p 可变,p 指向的对象不可变
    2.int const *p; // p 可变,p 指向的对象不可变
    3.int *const p; // p 不可变,p 指向的对象可变
    4.const int *const p; //指针p 和p 指向的对象都不可变

          可以看到,这四种情况面对的问题是p的值和p指向的值是否可以修改。

    下面,我给出一个例子,在例子中已经给出了详细的注释:

    #include <iostream>
    using namespace std;
    
    int main(void)
    {
    	//给出两个值用于测试
    	int testValue1 = 10;
    	int testValue2 = 15;
    
    	//这个代表 p 的值可以改变, *p 的值不能改变
    	const int *p = &testValue1;
    
    	p = &testValue2;   //可以给 p 赋其他的地址
    	//*p += 1;        //错误,*p 的值不能改变
    
    	//和 const int *p 是一个意思
    	int const *p2 = &testValue1;
    	p2 = &testValue2;
    
    	//这个代表 p3 指向的地址是不能改变的,但是 *p3 是可以改变的
    	int *const p3 = &testValue1;
    	//p3 = &testValue2;     //错误,地址不能改变
    	*p3 += 1;
    	
    	//这个代表 p4 指向的地址不能改变,且那个值也不能改变
    	const int *const p4 = &testValue1;
    }


          这下是不是明白了很多,但是,这样不好记啊,好吧,我现在讲下应该怎么去记下这些东西。

          其实,我们需要做的并不是刻意记住每一种写法代表的是什么,这样太累了,我们需要做的是好好观察:

         这里,观察的方式是“就近原则”,是观察 const 和谁的位置比较近,因为 const 修饰的不能改变的变量,所以,离 const 近,那么它就是不可改变的变量。

          

           1.const int *p; // p 可变,p 指向的对象不可变

    这里,const 和 *p 最近 ,所以,*p 就是不可改变的,也就是值是不可改变的,p 的地址是可以改变的。

          2.int const *p; // p 可变,p 指向的对象不可变

    这里,const 还是和 *p 最近,所以,是和第一种情况是一样的。

          3.int *const p; // p 不可变,p 指向的对象可变

    这里,const 和 p 最近,所以,情况就改变了,正好和前两种情况相反,p 的地址是不能改变的,而p 指向的对象是可以变的。

          4.const int *const p; //指针p 和p 指向的对象都不可变

    这下就简单的,const和 *p 和 p 都是最近的,所以,这两个都是不能改变的。

     

           说完了这些,是不是对const修饰指针很明白了!

  • 相关阅读:
    Mac下安装brew
    Mac下安装node.js
    Mac下mysql服务端密码重置及环境配置
    Mac配置jdk以及maven
    Mac下卸载jdk
    34个漂亮的应用程序后台管理界面(系列一)
    ViewState
    get和post
    无刷新 分页评论
    isPostBack原理
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3221772.html
Copyright © 2020-2023  润新知