C++从零开始学(视频教学版)(第2版)
上QQ阅读APP看书,第一时间看更新

3.1 变量与常量

常量和变量是在C++程序中使用频繁的元素,代表了数据的可变性。常量是在定义了之后值不能被改变的量,而变量在定义了之后还可以再赋值,即值可以被改变。

3.1.1 变量

变量指的是一个有名字的对象,即内存里一段有名字的连续的存储空间,变量的名字就叫作变量名,变量的值就是这段内存空间里存储的值。

每个变量都有自己的类型。变量的类型就是该变量所表示的内存空间所存储的数据类型。变量的类型可以是任何一种基本数据类型(当然也可以是非基本数据类型),变量占用的内存空间的大小在绝大多数情况下就是该变量类型的大小。

变量的作用是存储程序中需要处理的数据,它可以在程序中的任何位置使用。

1.变量的定义

语法:

例如:

其中,int数据类型(整型),而age是变量名,更多的时候,就说是变量age。在上例中,最后的分号表示变量定义已经完成,因为C++语句总是以分号结束。

提示

在C++中,变量命名不能取名为C和C++的保留字,不能超过250个字符,不能在同一作用范围内有同名变量,不能夹有空格。

如果要声明一个字符类型变量:

声明一个bool类型的变量:

其他类型,除了void不能直接定义一个变量以外,格式都是一样的。

有时同一数据类型有多个变量,此时可以分别定义,也可以一起定义:

一起定义多个同类型变量的方法:在不同变量之间以逗号(,)分隔,最后仍以分号(;)结束。

2.变量的赋值和输入

变量的赋值是通过赋值操作符(=)将其右边的值赋值给左边的变量。当定义一个变量的时候,编译器会在内存中分配该变量的存储空间,变量的赋值相当于将赋值操作符右边的值写到左边的变量所代表的内存存储空间中。


【实例3-1】变量赋值(代码3-1.txt)

新建名为“fztest”的【C++ Source File】源程序,源代码如下所示:

【代码详解】

在程序中,定义了3个int型变量,分别是num_apples、num_oranges和num_fruits。接下来给num_apples赋值为32,给num_oranges赋值为27,给num_fruits赋值为前两个数的和,然后将num_fruits值输出。num_apples减1,num_fruits重新赋值为前两个数的和。最后将结果输出。

运行结果如图3-1所示。

图3-1 代码运行结果

【实例分析】

在本例中,定义了int型变量,通过“=”实现了对int型变量的赋值操作。

3.变量初始化

在给一个变量赋值之前,这段存储空间里保存的是随机值,它甚至可能是别的程序运行完毕后在这段存储空间留下的值。

未初始化的变量是危险的,因为当你不小心使用了一个未初始化或未赋值的变量时,程序的运行结果是未知的。程序中通常需要对一些变量预先设置初始值,这样的过程称为初始化。

在什么时候对变量进行初始化呢?

(1)在定义时初始化变量。

通过一个等号,让a的值等于0。

同时定义多个变量也一样:

(2)在定义以后赋值。

如果想在程序中知道每个变量名的类型,变量类型所占内存空间的大小和内存空间的首地址可以通过sizeof表达式、typeid表达式和地址操作符来完成。

下面通过一个例子来说明如何使用这两个表达式来显示变量的类型和内存空间大小。


【实例3-2】siezeof和typeid(代码3-2.txt)

新建名为“sizetest”的【C++ Source File】源程序,源代码如下所示:

【代码详解】

首先,在主程序中定义了一个unsigned long类型的变量ul_val,初始化为0。下面又定义了一个float类型的变量f_val,该变量初始化为0.0F。调用typeid和sizeof将两个变量的类型名和空间大小输出。

运行结果如图3-2所示。

图3-2 代码运行结果图

【实例分析】

在本例中,使用typeid实现了取得变量数据类型的作用,使用sizeof实现了求得变量大小的效果。

3.1.2 常量

前面介绍了C++中变量的用法,这里介绍关于常量的用法。常量是指常数或在程序运行过程中值始终不变的数据,其值不能被改变。

常量的定义有以下两种方式。

1.宏表示常数

宏的语法为:

下面通过一个实例来说明#define的用法。


【实例3-3】宏定义常数(代码3-3.txt)

新建名为“Htest”的【C++Source File】源程序,源代码如下所示:

【代码详解】

在这个例子中,首先使用宏定义了一个PI常量,初始化为3.14159。在主程序中,使用cin输入一个圆的半径。根据输入的半径计算出圆的面积和球的体积,将算得的面积和体积输出。

运行结果如图3-3所示。

图3-3 代码运行结果图

【实例分析】

从结果来看,使用#define实现了PI的宏定义,在程序编译时,只要有PI的地方全部替换成3.14159。

2.const定义

相比变量定义的格式,常量定义必须以const开始。另外,常量必须在定义的同时完成赋值,而不能先定义后赋值。

【实例3-4】宏定义常数(代码3-4.txt)

新建名为“HCtest”的【C++ Source File】源程序,源代码如下所示:

【代码详解】

在这个例子中,首先使用const定义了一个PI常量,初始化为3.14159。在主程序中,使用cin输入一个圆的半径。根据输入的半径计算出圆的面积和球的体积,将计算出的面积和体积输出。

运行结果如图3-4所示。

图3-4 代码运行结果图

【实例分析】

从结果来看,使用const实现了对常量PI的定义。与宏定义不同,使用const定义常量不是在编译时就起作用,而是在运行时才发生作用。

下面介绍几种常见的数据类型常量的表达方式。

1.整型常量

C++提供3种表示整型常量的形式。


●十进制表示,即十进制整数,例如132、-345。

●八进制表示。以0开头的整数常量,例如010、-0536。

●十六进制表示。以0x开头的整数常量,例如0x7A、-0x3de。

2.实型常量

C++提供两种实型常量的表示形式。

●定点数形式:它由数字和小数点组成,如0.123、.234、0.0等。

●指数形式:数字+E(或e)+整数。E前必须有数字,E后必须是整数。例如,123e5或123E5都表示123×105

要注意,E或e的前面必须要有数字,且E后面的指数必须为整数。

3.字符常量

字符常量是由一对单引号引起来的字符,其值为引起来的字符在ASCII表中的编码,所以字符和整数可以互相赋值,例如:

提示

将常量尽量局部化,如果本模块使用,甚至只有本文件(.cpp)使用,就限制在其中。很多常量不是全局都会使用,本模块内部的,一定不要对外部公开,除非是关键的全局常量。