《好学的C++程序设计》——2.4 对数据变量怎样保护

2.4 对数据变量怎样保护

好学的C++程序设计
对数据变量进行保护就是对变量值进行保护。就是采取措施,使得在程序运行中变量值不受改变,以保证数据的安全。这在某些场合下是需要的,可以采取如下几方面的措施。

2.4.1 可用const声明常值数据变量

若数据变量的值保持不变,则称之为常值数据变量。常值数据变量的声明形式如下:

const 数据类型  变量名=常量值;

数据类型 const 变量名=常量值;

声明中,const可以放在开头,也可以放在紧靠变量名左侧。要注意,常值数据变量在声明时一定要用常量值进行初始化。在程序中是不允许对常值数据变量赋值的,这就保证了常值数据变量在整个程序中的值是不变的。

例如,我们可以声明一个double型常值数据变量如下:

const double pi=3.1416;

常值数据变量又叫做符号常量。经上述声明后,符号“pi”就是符号常量,在程序中它就代表常量3.1416了。如果作了如上声明以后,出现如下语句,则是非法的:

pi=1.2345;   //此语句非法!对常值数据变量再作赋值,是不允许的。

2.4.2 可在声明中用const对指针和别名进行限定

用const声明常值指针变量
若指针变量的值保持不变,则称之为常值指针变量。可用const声明常值指针变量。例如,我们作一个如下的声明:

int a=6,b=8;
int *const p=&a;

这种声明的特点是const紧靠指针变量名p的左侧。const限定p的值是恒定的。也就是说,指针p的指向是恒定的。在声明时就必须对p进行初始化(例如,设置初值为&a),以后不可再进行赋值。这说明指针p指向变量a不可动摇。但对变量a的值则无任何限制。

例如,作了如上声明以后,如果出现如下语句:

p=&b;    //非法!p是常指针变量,不允许再赋值。
a=29;    //合法。const只限定p的值,而对a的值无任何限制。```
声明常值指针变量的一般形式为:

```javascript
数据类型 *const 指针变量名=常地址;

情况已如上述。记住!此声明中,const必须紧靠着指针变量的左侧。声明时要初始化。

用const声明只读指针变量
我们知道,用指针(比如p)通过指针所指(p)可以对所指变量(比如a)进行访问。访问包括对所指变量(a)进行“读”或“写”。但在某些场合下,需要限制指针的访问功能,使得用指针所指(p)访问所指变量(a)时,只可读而不可写。这也就是说,不允许对指针所指(*p)进行赋值(写),以便从指针方面保证数据变量值的安全。这种对指针所指限制为只可读而不可写的指针变量称之为只读指针变量。

例如,我们有如下的声明及语句:

int a=80;       //A
const int *p;    //B
p=&a;          //C

B行声明中,const位于指针变量p声明的开头。这种声明不限制p的值,也就是不限制p的指向。因此,声明时不一定非要进行初始化。可以在声明过后另赋值。例如,C行对p赋值p=&a,这使p指向了变量a。这时,指针所指p就是所指变量a。访问p就是访问a。

但是,B行const限制了只可用p进行取值(读值),而不可对p进行赋值(写值)。这意味着,不可通过指针所指*p来改变所指变量a之值。这样的p就是只读指针变量。

若要改变所指变量a之值可以通过别的途径加以改变,例如对a重新赋值a=30000,或用别名改变a的值都行。就是限定不可通过指针所指*p来改变所指变量a之值。

例如,作了上述声明和语句以后,若有下列语句:

p=500;       //此句非法!不可对p进行赋值(写)。
a=4000;       //此句合法。声明中没有对变量a作任何限制。
cout<<p<<‘\n’;   //此句合法。可用p进行读值。输出a值4000。

合法或非法的原因在于,上述B行声明中const的限制,使指针所指*p只可读而不可写。

声明只读指针变量的一般形式为:

const 数据类型 * 指针变量名;

情况已如上述。记住!此声明中,const必须位于开头,使指针所指只可读而不可写。

用const声明常值只读指针变量
要声明一个既是常值又是只读的指针变量,那就是上述两种情况的结合。可以参照上述两种情况用两个const来进行限定。

声明常值只读指针变量的一般形式如下:

const 数据类型 * const 指针变量名=常地址;

开头的const限定指针变量为只读,紧靠指针变量名左侧的const限定指针变量为常值。声明时必须初始化,以后不可再赋值。

用const声明只读别名变量

用const对别名变量进行限定和对指针变量有点类似。不过,别名变量在平常声明时就初始化确定了是哪个变量的别名,以后就终身不变。因此,不用const限定,它是谁的别名就已经恒定了。现在的问题是要用const来限定它为只读别名变量,只可读而不可写。

声明的一般形式为:

const 数据类型 * 别名变量名=变量名;

const位于声明语句的开头。声明时仍必须进行初始化,以表明是谁的别名。

经此声明后,别名变量就是只读别名变量。在程序中,不可对该别名变量赋值(写值)。例如,有下列程序段:

int a=80;      //A
const int &x=a;   //B
x=2000;        //此句非法!不可对x进行赋值(写)。
a=4000;        //此句合法。声明中没有对变量a作任何限制。
cout<<x<<‘\n’;    //此句合法。可用x读取变量a之值。输出4000。

可见,作了B行的声明以后,使别名变量x只可读而不可写。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

时间: 2024-12-25 03:14:29

《好学的C++程序设计》——2.4 对数据变量怎样保护的相关文章

《好学的C++程序设计》导读

前言 好学的C++程序设计一.编写本书的背景 2011年伊始,中小学教学改革.高考改革波涛汹涌.在这场改革大潮中,媒体报道,一些地方的高中拟开大学先修课.这反映了中学教学改革在加强素质教育中,要有意着力培养学生的专业兴趣.爱好和专长,展现学生的专业发展潜力,促使其早日成才. 媒体又报道,自主招生的大学复试时增加了学科专业面试.这反映了高考将测试学生在所选专业方面的兴趣.爱好.专长和发展潜力. 教育部办公厅已发出通知,明确指出2012年高校自主招生对象主要是具有学科特长,以及全面发展且具有创新潜质

《好学的C++程序设计》——2.2 别名竟然登上大雅之堂

2.2 别名竟然登上大雅之堂 好学的C++程序设计 2.2.1 别名变量概念 别名俗称外号或绰号,如"丫蛋"."狗熊"等.C++中把别名雅称为"引用".但"引用"有"引而用之"的意思,难免会产生二义性.为此,本书就直用"别名"作叙述.不过,看别的书时,若看到"引用"二字,有可能是"别名"的雅称,这要注意.特别是考卷中遇到"引用"

《好学的C++程序设计》——1.2 计算机怎样对数据进行处理

1.2 计算机怎样对数据进行处理 好学的C++程序设计 1.2.1 把算法形成的程序输入计算机 要让计算机为我们作数据处理,我们必须把数据处理操作的步骤考虑好,交给计算机.目的是要让计算机按我们所考虑的步骤一步步进行操作,最后达到我们的目的. 我们所考虑的,对数据处理操作的步骤叫做算法. 算法必须用某种语言写出来形成一个程序.程序输入计算机,使计算机按程序指令一步步地对数据进行操作,最终实现按算法对数据进行的处理. 那么,当我们对数据处理的算法考虑好了,用什么语言写出程序来输入计算机呢? 1.2

《好学的C++程序设计》——2.1 数据分类入驻存储空间听候处理

2.1 数据分类入驻存储空间听候处理 好学的C++程序设计 2.1.1 基本数据分哪些类 我们平时所常用的基本数据类型有char(字符型).int(整数型).float(带小数点的数,称为实数型).double(双精度带小数点的数,简称双精度型). 其中,char型数据在计算机中实际就是以8位二进制码(ASCII码)所表示的一个整数.故从本质上说,char型也可看成是整数型.常用的字符见附录中ASCII码.字符可以对整型变量赋值.反过来,整数也可对字符类型变量赋值.二者是相通的.字符进行算术运算

《好学的C++程序设计》——2.5 习题

2.5 习题 好学的C++程序设计 1.请回答下列问题: (1)什么是变量存储空间.存储空间大小.存储空间地址.存储空间类型.存储空间内容? (2)基本数据类型有哪几种? (3)各基本数据类型的存储空间各占多少个字节?长度是几位? 2.请回答下列问题: (1)设一个unsigned short型变量的二进制值为1011011011010111.试将它化为十六进制数和十进制数.此数在存储空间中是怎样安置的?作图表示之. (2)试问一个int型数据长度多长?存储空间多大?能化成几位十六进制数? 3.

《好学的C++程序设计》——2.3 循址访问是怎样的

2.3 循址访问是怎样的 好学的C++程序设计 2.3.1 "牧童遥指杏花村"的启发 变量存储空间地址的指向古诗云:"借问酒家何处有?牧童遥指杏花村."路人向牧童请问酒家的地址,牧童感到光口头表述酒家地址不够清楚,要用一个手指指向酒家,就清楚了.并且路人由此可知,只要访问牧童所指,就能访问到所指杏花村酒楼的美酒佳肴了. 图2.4中,"2012是变量a的存储空间地址."这个关系是用语言或文字来表述的.那么,在图形上如何来表述这种关系呢?受牧童启发,

《好学的C++程序设计》——1.1 计算机怎样计数

1.1 计算机怎样计数 好学的C++程序设计 1.1.1 乒乓球场上的计分牌 我们知道,乒乓球球场上的计分牌有0.1.2.3.4.5.6.7.8和9,共10种牌.计分时,逢十进一,叫做十进制.平常我们用的就是. 我们设想,如果计分牌不是10种,而是0和1两种牌.那该怎么计分呢?那只能逢二进一了,这叫作"二进制".计算机内部用的是二进制. 我们再设想,如果计分牌有0.1.2.3.4.5.6.7.8.9.A.B.C.D.E和F,共16种牌,其中A.B.C.D.E依次代表10.11.12.1

《好学的C++程序设计》——第1章 概论

第1章 概论 好学的C++程序设计本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接.

《好学的C++程序设计》——第2章 对基本数据分类存储和访问

第2章 对基本数据分类存储和访问 好学的C++程序设计本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接.