《挑战30天C++入门极限》入门教程:C++中的const限定修饰符

 
 
入门教程: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(); 
}

 
 

原文地址:https://www.cnblogs.com/landv/p/11184638.html

时间: 2024-10-11 00:56:21

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

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

作为一个长篇的C++入门教程,无论如何也应该有这么个引言,可是文笔并不好的我,想了很久也不知道该如何写...... 仔细想想,与其把这篇短文当作教程的引言,其实它更应该是一篇引导初学者步入C++殿堂的策论. 几年并不算很长的编程经验,使我感触颇深,痛苦迷茫,以及成功后的喜悦一直交替着伴随我,爱好编程的我,在学习期间也被很多很多学习的困难疑惑所阻挡,甚至不只一次的想放弃. 让我初次领略到作为一个程序员应该有快乐与喜悦的是VISUAL BASIC语言,这些年为了工作,也学习过很多其它的语言,包括时下

Spring Boot从入门到进阶教程系列 -- 集成Freemarker配置

步骤1. 我们可先配置application.properties的Freemarker基本配置,可参考第一篇教程[Spring Boot从入门到进阶教程系列 -- 外部Tomcat多方式启动,加密解密配置数据] 核心配置 ######################################################## ### freemarker ######################################################## spring.fr

Android视频录制从不入门到入门系列教程(三)————视频方向

运行Android视频录制从不入门到入门系列教程(二)————显示视频图像中的Demo后,我们应该能发现视频的方向是错误的. 由于Android中,Camera给我们的视频图片的原始方向是下图这个样子的: 就是说,即使你是竖着拿手机的,Camera提供给你的视频图像的方向还是上图那样横着的图片. 我们可以通过下述方向改变Camera提供的视频图像的方法: camera.setDisplayOrientation(90); 让图像顺时针旋转90度,视频图像的方向就正常的. 本篇文章DEMO下载.

【0002(基础)】Skyline二次开发入门经典系列教程&mdash;&mdash;目录

这段时间由于个人事务太多,以至于没有按照时间更新系列教程,本人将尽快补上所欠章节,在此说声抱歉!   这一章在我心目中占有很重要的地位,因为我想通过这一章的内容来确定整个系列的大致走向.然而在整理的过程中,发现现实远比想象要复杂得多:首先想尽可能介绍较多的知识点,其次又要考虑学习的简易程度,再次又要确定顺当的知识体系流程-- 由于暂时的考虑无论如何也是不可能完备的,因此为了不影响后面教程的编写,暂定把这一章作为一个[流动性质]的可变章节,在编写每一章时,动态根据实际情况修改(添加.移动.修改)系

【0001(基础)】Skyline二次开发入门经典系列教程总览

本人是从2012年开始接触Skyline二次开发的,经历过 v6.0~v6.5(最新的6.6版本还未使用)的所有版本.作为一名非GIS专业毕业的大学本科生,鬼使神差般地进入了这个瑰丽的GIS领域.因此,在从事了4年多的Skyline二次开发工作后,我不能说我是"授业有专攻",更不能说我是"闻道有先后".在这个领域内,大牛之人比比皆是,正是因为他们的存在与指引,才使得我现在有点东西可以写出来供大家交流沟通.   整理这个系列教程的原因主要出于如下几点的考虑: 1.Sk

[渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的Code First迁移和部署

这是微软官方SignalR 2.0教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第五篇:MVC程序中实体框架的Code First迁移和部署 原文:Code First Migrations and Deployment with the Entity Framework in an ASP.NET MVC Application 译文版权所有,谢绝全文转载--但您可以在您的网站上添加到该教程的

jQuery入门(4)jQuery中的Ajax应用

jQuery入门(1)jQuery中万能的选择器 jQuery入门(2)使用jQuery操作元素的属性与样式 jQuery入门(3)事件与事件对象 jQuery入门(4)jQuery中的Ajax应用 一.原始Ajax与jQuery中的Ajax 首先通过实例, 来看一下jQuery实现Ajax有多简单. 下面是一个使用原始Ajax的示例: 01 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "

asp入门一 入门环境搭建

asp入门一 入门环境搭建,布布扣,bubuko.com

jQuery入门(1)jQuery中万能的选择器

jQuery入门(1)jQuery中万能的选择器 jQuery入门(2)使用jQuery操作元素的属性与样式 jQuery入门(3)事件与事件对象 jQuery入门(4)jQuery中的Ajax()应用 编写任何JavaScript程序我们要首先获得对象,jQuery选择器能彻底改变我们平时获取对象的方式,可以获取几乎任何语意的对象,比如 “拥有title属性并且值中包含test的<a>元素”,完成这些工作只需要编写一个jQuery选择器字符串, 学习jQuery选择器是学习jQuery最重要