入门教程:C++中的const限定修饰符

  const修饰符可以把对象转变成常数对象,什么意思呢?

  意思就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用!

  使用方法是:

const int a=1;//这里定义了一个int类型的const常数变量a;

  但就于指针来说const仍然是起作用的,以下有两点要十分注意,因为下面的两个问题很容易混淆!

  我们来看一个如下的例子:

#include <iostream> 

using namespace std; 
 

void main(void) 

const int a=10; 
int b=20; 
 

const int *pi; 

pi=&a; 
cout <<*pi << "|" << a <<endl; 

pi=&b; 
cout <<*pi << "|" <<b <<endl; 

cin.get(); 
}

  上面的代码中最重要的一句是 const int *pi
  这句从右向座读作:pi是一个指向int类型的,被定义成const的对象的指针;
  这样的一种声明方式的作用是可以修改pi这个指针所指向的内存地址不能修改指向对象的值

  如果你在代码后加上*pi=10;这样的赋值操作是不被允许编译的!

  好,看了上面的两个例子你对const有了一个基本的认识了,那么我们接下来看一个很容易混淆的用法!

  请看如下的代码:

#include <iostream> 
using namespace std; 
 
void main(void) 

int a=10; 
 

const int *const pi=&a; 
 
cout <<*pi << "|" <<a <<endl; 

cin.get(); 
}

  上面的代码中最重要的一句是 const int *const pi
  这句从右向座读作:pi是一个指向int类型对象的const指针;

  这样的一种声明方式的作用是你既不可以修改pi所指向对象的内存地址不能利用指针的解引用方式修改对象的值,也就是用*pi=10这样的方式;

  所以你如果在最后加上*pi=20,想试图通过这样的方式修改对象a的值是不被允许编译的!

  结合上面的两点所说,把代码修改成如下形式后就可以必然在程序的任意的地方修改对象a的值或者是指针pi的地址了,下面的这种写法常被用语涵数的形式参数,这样可以保证对象不会在涵数内被改变值!

#include <iostream> 
using namespace std; 
 
void main(void) 

const int a=10;//这句和上面不同,请注意! 
 

const int *const pi=&a; 
 
cout <<*pi << "|" <<a <<endl; 

cin.get(); 
}

 
 

《挑战30天C++入门极限》入门教程:C++中的const限定修饰符的更多相关文章

  1. 《挑战30天C++入门极限》C/C++中结构体(struct)知识点强化

        C/C++中结构体(struct)知识点强化 在上一个教程中我们已经简单的阐述了什么是结构体了,为了进一部的学习结构体这一重要的知识点,我们今天来学习一下链表结构. 结构体可以看做是一种自定义 ...

  2. 《挑战30天C++入门极限》 对C++中引用的补充说明(实例)

        对C++中引用的补充说明(实例) #include <iostream>    #include <string>    using namespace std;    ...

  3. 《挑战30天C++入门极限》C/C++中字符指针数组及指向指针的指针的含义

        C/C++中字符指针数组及指向指针的指针的含义 就指向指针的指针,很早以前在说指针的时候说过,但后来发现很多人还是比较难以理解,这一次我们再次仔细说一说指向指针的指针. 先看下面的代码,注意看 ...

  4. 《挑战30天C++入门极限》C/C++中字符串常量的不相等性及字符串的Copy

        C/C++中字符串常量的不相等性及字符串的Copy #include <iostream>    void main(void)  {      if("test&quo ...

  5. Java入门 - 语言基础 - 07.修饰符

    原文地址:http://www.work100.net/training/java-modifier-type.html 更多教程:光束云 - 免费课程 修饰符 序号 文内章节 视频 1 概述 2 访 ...

  6. 《挑战30天C++入门极限》入门教程:实例详解C++友元

        入门教程:实例详解C++友元 在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点: 通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为pu ...

  7. 《挑战30天C++入门极限》C++面向对象编程入门:类(class)

        C++面向对象编程入门:类(class) 上两篇内容我们着重说了结构体相关知识的操作. 以后的内容我们将逐步完全以c++作为主体了,这也意味着我们的教程正式进入面向对象的编程了. 前面的教程我 ...

  8. 《挑战30天C++入门极限》新手入门:C/C++中的结构体

        新手入门:C/C++中的结构体 什么是结构体? 简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构 ...

  9. 《挑战30天C++入门极限》引言

    作为一个长篇的C++入门教程,无论如何也应该有这么个引言,可是文笔并不好的我,想了很久也不知道该如何写...... 仔细想想,与其把这篇短文当作教程的引言,其实它更应该是一篇引导初学者步入C++殿堂的 ...

随机推荐

  1. ASP.NET面试题130道

     130道ASP.NET面试题 1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. ...

  2. 设置 SQL*Plus 的运行环境

    SQL*Plus 的运行环境是用来输入.执行 SQL*Plus 命令和显示返回结果的场所,设置合适的 SQL*Plus 运行环境,可以使 SQL*Plus 按照用户的要求运行和执行各种操作.set 命 ...

  3. JavaScript 继承 封装 多态实现及原理详解

    面向对象的三大特性 封装 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. ...

  4. pip 和pip3的区别

    前言装完python3后发现库里面既有pip也有pip3,不知道它们的区别,因此特意去了解了一下. 解释先搜索了一下看到了如下的解释, 安装了python3之后,库里面既会有pip3也会有pip 1. ...

  5. sudo权限

    sudo授权 给普通用户赋予部分管理员权限 /sbin/ 在此目录下的命令只有超级用户可以执行 /usr/sbin/ root身份 visudo 赋予普通用户权限命令,命令执行后和vi一样使用 用户名 ...

  6. 大数据技术之Hadoop3.1.2版本完全分布式部署

    大数据技术之Hadoop3.1.2版本完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.主机环境准备 1>.操作系统环境 [root@node101.yinz ...

  7. 智能驾驶数据后处理分析利器—INTEWORK-VDA

            随着智能驾驶技术在新车上逐步普及,车辆研发阶段需要做大量的实车测试工作,当前的测试方式主要是路采实车数据后,按标准和法规进行测试场景提取和测试数据分析.调查显示绝大部分智能驾驶研发厂商 ...

  8. P4315 月下“毛景树”[树剖]

    题目描述 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园. 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校园里. 爬啊爬~爬啊爬毛毛虫爬到了一颗小小的"毛景树&quo ...

  9. Oracle 序号函数

    Oracle提供的序号函数:以emp表为例:1: rownum 最简单的序号 但是在order by之前就确定值.select rownum,t.* from emp t order by ename ...

  10. Visual Studio 2017 许可证已过期解决方案

    1.卸载并重安VS2017 2.安装后打开VS2017,点击帮助=>注册产品,输入序列号NJVYC-BMHX2-G77MM-4XJMR-6Q8QF(企业版), KBJFW-NXHK6-W4WJM ...