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

用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修饰指针很明白了!

C语言--const修饰指针解析相关推荐

  1. C语言 const 修饰指针 - C语言零基础入门教程

    目录 一.const 简介 二.const 修饰指针 1.const int *p 2.int const *p 3.int * const p 4.const int * const p 三.猜你喜 ...

  2. c语言const修饰指针

    转载于:https://www.cnblogs.com/sclu/p/11273238.html

  3. C语言 const 修饰函数返回值 - C语言零基础入门教程

    目录 一.const 简介 1.const 修饰变量 2.const 修饰指针 二.const 修饰在函数名前面 三.const 修饰在函数名后面 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : ...

  4. C语言 const 修饰函数参数 - C语言零基础入门教程

    C语言 const 修饰函数参数 - C语言零基础入门教程 目录 一.const 简介 1.const 修饰变量 2.const 修饰指针 3.const 修饰在函数名前面 4.const 修饰在函数 ...

  5. C语言 const 修饰变量 - C语言零基础入门教程

    目录 一.const 简介 二.const 实战 1.使用 const 修饰变量必须初始化 2.使用 const 修饰变量不初始化 3.修改 const 修饰变量的值 三.重点提示 四.猜你喜欢 零基 ...

  6. const 修饰指针

    目录 const修饰指针 1.1const 放在*的左边 1.2const放在*的右边 const修饰指针 1.1const 放在*的左边 修饰的是指针指向的内容(*p),指针指向的内容,不能通过指针 ...

  7. C++阶段01笔记07【指针(基本概念、变量定义和使用、内存空间、空指针和野指针、const修饰指针、指针和数组、指针和函数)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 7 指针 7.1 指针的基本概念 7.2 指针变量的定义和使用 示例 7.3 指针所占内存空间 示例 7.4 空指针和野指针 示 ...

  8. const修饰指针和引用的用法【转贴】

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  9. c/c++教程 - 1.9 指针 空指针 野指针 const修饰指针 指针常量 常量指针 指针和数组 指针和函数

    十一.指针 (1)指针的定义和使用 指针的作用:可以通过指针间接访问内存. 参考视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&a ...

最新文章

  1. Python--32 模块 包
  2. Scrapy定向爬虫教程(三)——爬取多个页面
  3. fatal: unable to access ‘https://github.com/PanJiaChen/vue-element-admin.git/‘: OpenSSL SSL_read: Co
  4. c语言错误解析-变量声明
  5. LeetCode 154 寻找旋转排序数组中的最小值 II
  6. English trip M1 - PC9 Where am I Teacher:Jade
  7. ondestroy什么时候调用_JavaScript基础——你真的清楚JavaScript是什么吗?
  8. AI如何变革阿里电商?iDST首席科学家任小枫首次公开演讲
  9. php header 刷新,一个离奇的php header函数问题的解决
  10. 【linux】修改某一行
  11. paip.提升用户体验---c++ 右键菜单以及socket接口
  12. Android TV上 WebView播放视屏与TV自带画中画不兼容处理及分析
  13. Unity 插件之 Highlighting 高亮插件
  14. Fluent 三种初始化使用方法
  15. Spell of the rising moon
  16. DevOps自动化测试的原则和实践
  17. android手机整体规模,2021年Android手机市场规模
  18. mac下编译hadoop3.0.*版本的native lib
  19. 小技巧,IDEA 卡住不动解决办法
  20. 02. Docker安装记录卸载

热门文章

  1. [WebApp]定宽网页设计下,固定宽度布局开发WebApp并实现多终端下WebApp布局自适应...
  2. u-boot-1.3.4移植到mini2440+128M nand boot(3)
  3. 设置VSS2005使支持通过Internet访问(转)
  4. JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例...
  5. ArcGIS Engine生成等值线(C#)
  6. AlwaysOn只读路由配置
  7. Android_图像渲染(Shader)
  8. 升级PHP到5.3.3的过程及注意事项
  9. T级的备份兄弟们都怎么做
  10. ASP程序快速生成Excel文件