关于const,首先建立这样的一个认识:const并不是定义了一个常量,而是定义了在某种环境下只读的变量。下面我们来区分一些东西:

 int num = ;
const int*p = #
*p = ;
int*const q = #
*q = ;
int num_next{ };
p = &num_next;
q = &num_next;

下面给出const的一个说明:

关键问题点:const 属于修饰符 ,关键是看const 修饰的位置在那里
1、const int *a
这里const 修饰的是int,而int定义的是一个整值
因此*a 所指向的对象 值 不能通过 *a 来修改,但是 可以重新给 a 来赋值,使其指向不同的对象
eg:
       const int *a = 0;
       const int b = 1;
       int c = 1;
        a = &b  //ok!  额外:注意不能通过a 来修改 b值
     a = &c  //ok!   额外:虽然c本身不是一个常量
     *a = 2  //erro! 为题就在这里,不能修改通过 *a 所指向的对象值,最后赋值得对象是c,因此不能通过*a 来修改c值。
2、int  *const a       
这里const修饰的是 a ,a代表的是一个指针地址
因此不能赋给a其他的地址值,但可以修改a指向的值
这有点和cont int *a相反的意味,例子就不说了

3、至于int const *a 和 const int *a 的意义是相同的 他们两个的作用等价

补充:
4、const int * const a 
这个代表a所指向的对象的值以及它的地址本身都不能被改变

5、 const int *const a

a所指向的对象及对象的值均不可改变。

关于const的点滴补充:
1、const 对象的地址只能赋值给指向const 对象的指针
2、指向const 对象的指针可以 被赋 以 一个非const 对象的地址 
3、指向const 得指针常被用作函数的形式参数,保证被传递给函数的实际对象在函数得实际对象在函数中不会被修改
4、常量在定义后就不能被修改,所以它必须被初始化。未初始化的常量定义将导致编译错误(上面都是在说明const得问题,所以没有赋值,实际语句中要赋值的)

最新文章

  1. php登录注册页面及加载
  2. .NET 程序集Assembly使用
  3. python3 生成器&迭代器
  4. HTML input-file 上传类型控制
  5. 使用C#开发ActiveX控件(新)
  6. 【BZOJ 2820】YY的GCD
  7. July 12th, Week 29th Tuesday, 2016
  8. 361. Bomb Enemy
  9. JS中的Math.ceil和Math.floor函数的用法
  10. Hadoop学习-HDFS篇
  11. Struts2 实现文件上传
  12. oracle 使用技巧
  13. Java第九周学习总结
  14. 【转】PC架构系列:CPU/RAM/IO总线的发展历史!
  15. tree conflict svn 怎么解决
  16. Python面向对象篇(2)-继承
  17. boke练习: springboot整合springSecurity出现的问题,传递csrf
  18. 51Nod 1199 Money out of Thin Air (树链剖分+线段树)
  19. Codeforces Round #375 (Div. 2) B. Text Document Analysis 模拟
  20. SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行

热门文章

  1. 前后端分离djangorestframework——分页组件
  2. 光盘yum源搭建
  3. 你的MySQL服务器开启SSL了吗?SSL在https和MySQL中的原理思考
  4. 关于Numba开源库(Python语法代码加速处理,看过一个例子,速度可提高6倍)
  5. python Docker 查看私有仓库镜像
  6. 谱聚类算法(Spectral Clustering)
  7. Zookeeper Health Checks
  8. 生成.project、.classpath文件
  9. BSOJ 5603 -- 【SNOI2017】炸弹
  10. C#多线程の遇见长耗时操作以及多任务(简明记要)