C++ const修饰符和指针

开发工具与关键技术:C++、VisualStudio
作者:何任贤
撰写时间:2019年04月10日
const修饰符,是用来修饰变量,被const修饰符,修饰过的变量,就叫做常量,常量是一种只能被读取,不能被修改的量。在C++声明一个常量时,不但要const修饰符还有在声明时就要给它进行初始化,你不给它初始化,编译器就会报错,不给const修饰符就不是常量,下面是对常量只读属性和声明的示例

void main()
{
const int a = 10;
a = 15;
}

当你尝试给常量赋值时,编译器会报错,并且给你提示,意思是表达式必须是可以修改的左值,证明了常量是不可以修改的,那么你不给常量初始化编译器又会报什么错呢?

我们可以看到当我不给常量赋值时,编译器报错,并提示常量a需要初始值设定项,证明了常量必须进行初始化操作。
那么我们用const修饰符修饰指针呢?又有什么样的效果?指针和普通变量不同指针存储的是地址,那么const修饰符对指针修饰产生的效果有三种。我们先说第一种。
先看代码和结果我们再说第一种
void main()
{
int x = 10;
const int *a;
a = &x;
cout << “a所指向的地址:” << a << “\n”
<< “a的解地址” << *a << “\n”;
}

通过结果和代码我们可以知道被const修饰符这样修饰的指针还是可以获得地址和解地址的,那么可以改变解地址后的值吗?因为指针是可以通过地址修改值的,那么让const修饰过还行吗?

这个错误和上面的是一样的,我们现在可以知道,const这样修饰的话,会使指针无法通过解地址修改x的值,这是第一种的效果,我们称它为指向常量的指针,那么第二种

我们发现第二种有两个错误,和之前的一样,意思这个指针要进行初始化,该初始化是固定不可修改的。
void main()
{
int x = 10; int *const a= &x;
*a = 15;
cout << *a << “\n”;
}

我们可以知道的是,这样修饰的指针是可以正常的对解地址的值进行赋值的,那么我们一般称它为常量指针
那么第三种呢则是这两种的结合体,不但不可以对解地址赋值,还不能改变指针所指向的地址,而且还必须进行初始化,反正就是什么都不能动,但是我们可以正常的读取值,这种结合了第一第二种特性,那么它名字也是结合的就是指向常量的常量指针,这就是const修饰符对指针修饰的三种不同的效果。

C++ const修饰符和指针相关推荐

  1. C语言-指针-基础用法、运算、指针与数组、指针数组、多级指针、void指针和const修饰符-学习笔记08

    文章目录 1. 地址和变量 2. 指针 2.1 基本声明 2.2 指针的目标 3. 指针的运算 3.1 指针的赋值运算 3.2 指针的算术运算 3.2.1 指针与常量的加法与减法 3.2.2 两指针相 ...

  2. [Reprint]C++函数前和函数后加const修饰符区别

    c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...

  3. 我对const修饰符应用的理解

    先说说我对编译器对const处理的理解:const修饰符定义一个常量,const变量在整个程序中只有一个拷贝.编译器会跟踪所有用到这个常量的地方,一旦发现任何一个操作可能会改变这个它是常量这个属性,那 ...

  4. const修饰符的用法总结

    一.const常量 在 C++ 中,有两种简单的定义常量的方式: 1.使用 #define 预处理器. #define LENGTH 10 #define WIDTH 5 #define NEWLIN ...

  5. C++成员函数中的const修饰符

    在一些C++源码中经常见到const修饰的函数,这里的const与放的位置无关,也就是下面三种写法是等效的,只不过通常使用第一种写法,可以编写函数进行测试,这里的const虽然写在了函数的位置,其实是 ...

  6. C++ const 修饰符

    C++ const 实施保护 概述 常对象 常对象成员 常成员函数 常数据成员 数据成员访问限制 常对象修改的限制 常指针 指向常变量的指针 指向对象的指针 小结 对象的常引用 总结 概述 const ...

  7. C++ const修饰符的简单介绍

  8. 【C 语言】const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )

    文章目录 一.const 普通用法 二.常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 ) 三.指针常量 ( 指针不能被修改 ) 三.指向 常量 的 指针常量 四.const 在 * 左 ...

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

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

最新文章

  1. Java Scala 混合编程导致 编译失败 ,【找不到符号】问题解决
  2. html中如何使用渐变颜色代码,html – 如何在CSS中使用渐变作为字体颜色?
  3. linux修改可执行程序,反汇编,修改,然后重新组装一个Linux可执行文件
  4. 查询mysql 中的空文本_MySQL查询以显示空列的自定义文本
  5. 千元优品vivo U3上架:骁龙675处理器+5000mAh超大电池
  6. 一个action类中写多个方法需要继承MappingDispatchAction
  7. 借助阿里AntUI元素实现两个Web页面之间的过渡——“Loading…”
  8. jira confluence 作用 ppt_有没有一个PPT技巧让自己觉得人生都亮了?
  9. 精度、小数位数和长度
  10. 在小程序可以完成任务的情况下,为什么程序员非要编写大程序呢?
  11. linux gdb中c(continue)的使用总结
  12. 混沌图像加密matlab,基于复合混沌系统的彩色图像加密算法及Matlab实现
  13. Consumer消息拉取和消费流程分析
  14. ipv4地址怎么设置 手机_怎么修改手机ip地址?手机ip地址更改方法介绍
  15. 公司企业兔年祝福元旦祝福贺卡邀请函模板!
  16. MySQL——VARCHAR和CHAR类型
  17. 实现从淘宝定时抓取订单数据、打印电子面单并保存到ERP表中!
  18. 对Titanic公开数据集进行缺失值统计
  19. 【TypeScript】带类型语法的JavaScript
  20. 2020年系统规划与管理师上午真题及答案解析

热门文章

  1. CentOS 7.6 64位安装docker并设置开机启动
  2. cs224n第二讲词向量表示:word2vec
  3. 数据库设计中,多对多关系使用使用逗号分割关联讨论
  4. nyoj 202红黑树 (搜索)
  5. 老男孩Python全栈开发(92天全)视频教程 自学笔记07
  6. BZOJ 2282 树的直径
  7. PHP用CURL伪造IP和来源
  8. 百度地图api应用程序大赛作品
  9. 最邻近插值法(The nearest interpolation)实现图像缩放
  10. Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法