2.3 变量
变量是指在程序运行期间其值可以改变的量,本节将介绍变量的相关知识。
2.3.1 标识符
标识符(identifier)是对C++程序中的常量、变量、语句标号以及用户自定义函数的名称进行标识的符号。标识符命名规则如下:
(1)由字母、数字及下画线组成,且不能以数字开头。
(2)大写和小写字母代表不同意义。
(3)不能与关键字同名。
(4)尽量“见名知义”,应该受一定规范的约束。
以下是不合法的标识符:6A、ABC*(不能使用*)、case(是保留字)。
误区警示
标识符必须用英文,这是一个不完全正确的说法。在Visual C++6.0中,使用中文做标识符会出现错误;但在Visual Studio 2019中使用中文标识符,编译器不会报错。建议最好不用中文写代码,否则会造成不必要的麻烦。另外,书写代码时多写注释,会方便很多。
C++中有许多保留关键字,如表2.2所示。
表2.2 C++保留关键字
说明
这些保留关键字是不需要背诵的,在开发环境中编写C++代码,所有保留关键字都会显示为特殊字体(例如变成蓝色),今后的学习中将会逐渐接触到这些保留关键字的具体使用方法,可以慢慢积累。
2.3.2 变量与变量声明
每个变量都有一个变量名标识,且具有一个特定的数据类型。
变量使用之前一定要定义或声明,变量声明的一般形式如下:
[修饰符] 类型 变量名标识符;
类型是变量类型说明符,说明变量的数据类型。修饰符是可选的,可以没有。
多个同一类型的变量可以在一行中声明,不同变量名之间用逗号隔开,例如:
int a,b,c;
上述语句的声明效果与下面的语句等价。
int a; int b; int c;
2.3.3 整型变量
整型变量可以分为短整型、整型和长整型,变量类型说明符分别是short、int和long。根据是否有符号还可分为以下6种。
整型:[signed] int。
无符号整型:unsigned [int]。
有符号短整型:[signed] short [int]。
无符号短整型:unsigned short [int]。
有符号长整型:[signed] long [int]。
无符号长整型:unsigned long [int]。
方括号中的关键字可以省略,例如,[signed] int可以写成int。
短整型short在内存中占用两个字节的空间,可以表示的数的范围是-32768~32767。如果是无符号短整型unsigned short,表示的数的范围是0~65535。整型int占用4个字节的空间,有符号整型表示的数的范围是-2147483648~2147483648,无符号整型unsigned int表示的数的范围是0~4294967295。长整型与整型占用字节数相同,表示的数的范围也相同,具体如表2.3所示。
表2.3 整型变量表示的数值范围
误区警示
不同的编译器,整型的取值范围是不一样的。在字长为16位的计算机中,整型就为16位;在字长为32位的计算机中,整型就为32位。
2.3.4 实型变量
实型变量又称为浮点型变量,分为单精度(float)、双精度(double)和长双精度(long double)3种。
Visual C++ 6.0中,对float提供6位有效数字,对double提供15位有效数字,并且float和double的数值范围不同。对float分配4个字节,对double和long double分配8个字节。
1.单精度
变量类型说明符为float,该实型数据在内存中占用4个字节,表示的数值范围是-3.4×10-38~3.4×1038。例如:
float a;
2.双精度
变量类型说明符为double,该实型数据在内存中占用8个字节,表示的数值范围是-1.7e-308~1.7e308。例如:
double b;
3.长双精度
变量类型说明符为long double,该实型数据在内存中占用10个字节,表示的数值范围是-1.1e-4932~1.1e4932。例如:
long double c;
2.3.5 变量赋值
变量值是动态改变的,每次改变都需要进行赋值。变量赋值的形式如下:
变量名标识符 = 表达式
变量名标识符是声明变量时定义的,表达式将在后面的章节中讲解。例如:
上述代码声明i是一个整型变量,然后将常量100赋值给i。
上述代码首先声明了两个变量i,j,然后为变量i赋初值,再将i的值赋给j,最终j的值也是100。
2.3.6 变量赋初值
可以在声明变量时就把数值赋给变量,这个过程叫变量赋初值,其情况有以下几种:
(1)int x=5; 表示定义x为有符号的基本整型变量,赋初值为5。
(2)int x,y,z=6; 表示定义x、y、z为有符号的基本整型变量,z赋初值为6。
(3)int x=3,y=3,z=3; 表示定义x、y、z为有符号的基本整型变量,且赋予的初值均为3。
注意
定义变量并赋初值时可以写成“int x=3,y=3,z=3;”,但不可写成“int x=y=z=3;”这种形式。
2.3.7 字符变量
字符变量的类型说明符为char,一个字符变量在内存中占用1个字节,例如:
字符变量在内存中存储的是字符的ASCII码,即一个无符号整数,其形式与整型变量的存储形式一样,字符型数据与整型数据之间通用。
(1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。
【实例2.1】 字符型和整型数据之间的秘密。(实例位置:资源包\TM\sl\2\1)
在本实例中,定义字符型变量并赋值,然后用printf输出两种形式:一种是字符型%c形式,另一种是整型%d形式。具体代码如下:
程序运行结果如图2.3所示。
(2)允许对字符数据进行算术运算,即对它们的ASCII码值进行算术运算。
【实例2.2】 字符型数据进行算术运算。(实例位置:资源包\TM\sl\2\2)
本实例中,定义字符型变量并赋值,其中一个字符进行减32计算,另一个字符进行加32计算,最后这两个字符分别进行加10计算,并以%d和%c的格式输出。具体代码如下:
程序运行结果如图2.4所示。
图2.3 字符型与整型数据输出效果
图2.4 字符型数据进行算术运算
误区警示
给char型赋值时不可以使用三个单引号,因为这样编译器无法识别开始和结束位置,例如:
char cChar='A''; /*使用三个单引号为字符型赋值*/
会出现如下所示的错误。
编程训练(答案位置:资源包\TM\sl\2\编程训练\)
【训练1】 字符B的无中生有 程序中不出现字符“B”,试着输出字符“B”。
【训练2】 预测“B+32”的结果 以字符格式%c输出“'A'+32”的结果,观察结果,猜测一下“'B'+32”的结果。