入门教程: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. Widget Size and Position !!!!!!!!!!!!!!!!!!

    https://medium.com/@diegoveloper/flutter-widget-size-and-position-b0a9ffed9407 I have read many ques ...

  2. 【转载】C#中Add方法将往List集合末尾添加相应元素对象

    在C#的List集合操作中,有时候需要将符合条件的对象添加到已有List集合中的末尾,此时就需要使用到List集合的Add方法,Add方法的作用为将对应的元素添加到List集合末尾,Add方法签名为v ...

  3. stage1----航空票务系统需求分析报告

    航空票务管理系统需求分析报告 题    目    航空票务管理系统需求分析报告 学    院       信息科学与工程学院 专    业        计算机科学与技术 组    员         ...

  4. 将H5页面打包成安卓原生app

    第一步:下载HBuilderX,新建项目选择5+App新建一个空项目如下图 新建后项目目录结构如下图 第二步,将你要打包成安卓app的文件打包,最后生成的文件目录如下图 1.打包完成后,将对应文件内容 ...

  5. 大学课后答案微信小程序项目实践(1)

    叨逼叨 还记得以前小编上大学那会苦于课后习题没有答案...到了考试....就像下面这个图一样- 现在,那些同样在纠结于书本后的答案太遥远的同学们,要告诉你们一个好消息,个人历时两周作业的时间开发的小程 ...

  6. 【hbase】hbase理论学习

    HBase用途: 基于Hadoop Distributed File System,是一个开源的,基于列存储模型的分布式数据库. HBase简介: HBase是一个分布式的.多版本的.面向列的开源数据 ...

  7. 【JUC】4.Synchronized与ReentrantLock对比

    与synchronized相同,ReentrantLock也是一种互斥锁: synchronized与ReentrantLock的对比: 都是可重入锁 可以再次获取自己的内部锁,即:一个线程获取某对象 ...

  8. 解决通过vue-router打开tab页,下次进入还是上次history缓存的界面状态的问题

    一.问题描述: 1. 跳转模式:界面A-->界面B(界面A中通过 this.$router.push({name:'组件B名称', params: {参数}}) 通过打开新tab页的方式打开界面 ...

  9. Redis配置文件详情

    # Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写) # # 1k => bytes # 1kb => ...

  10. orm字段类型使用

    IntegerField:整数类型,映射到数据库中会变成11位的int类型 num是整型字典  object中的5是第五行还是id是5? 整型字符串型都可以传到整数字段 FloatField:浮点数类 ...