2.6 变量赋初值和类型转换
1. 变量赋初值
在程序运行时,系统会给每一个声明过的变量分配相应大小的内存空间,用于存放对应类型的数据,因而变量名也就是对相应内存单元的命名。声明一个变量的同时,也可以给它赋以初值,而这实质上就是给对应的内存单元赋值。例如:
int a=30; //声明int型变量a,并赋初值为30 double x=3.56; //声明double型变量x,并赋初值为3.56
也可以使被定义的一部分变量赋初值,例如:
int a,b,c=30; //声明int型变量a,b,c,但只将c赋初值为30
如果将几个变量赋予同一个初值,应写成:
int a=30, b=30, c=30;
表示int型变量a,b,c的初值都是30。但不能写成:
int a=b=c=30;
在定义变量时,如果加上关键字const,则变量的值在程序的运行期间不能改变,这种变量称为常变量(Constant Variable)。
常变量的声明语句结构为:
const 数据类型说明符 常量名 = 常量值;
或
数据类型说明符 const 常量名 = 常量值;
例如:
const int a=3; //用const声明常变量a,它的值不能改变,始终为3 double const x=12.5; //用const声明常变量x,它的值不能改变,始终为12.5
在定义常变量时必须同时对它初始化(即指定其值),此后它的值不能再改变。常变量不能出现在赋值号的左边。例如,上例不能写成:
const int a; a=3; //错误!常变量不能被赋值
同样,
double const x; //错误!常变量不能被赋值 x = 12.5;
也是错误的。
2. 类型的转换
当表达式中出现了多种类型数据的混合运算时,例如:
10+'x'+1.5 −9578.6574*'z'
是合法的。在进行计算时,不同类型的数据要先进行类型转换,然后进行计算。
表达式中的类型转换分为隐式转换和强制转换两种,本节只介绍隐式转换。
在算术运算和关系运算中,如果参与运算的操作数类型不一致,则系统自动对数据进行转换(即隐式转换),转换的原则是将低类型的数据转换为高类型的数据。
各种类型的高低顺序如下:
表2.3列出了隐式转换的规则,这种转换是安全的,因为在转换过程中数据的精度没有损失。
表2.3 混合运算时数据类型的转换
下面这段程序说明了类型转换的规则:
float fVal; double dVal; int iVal; unsigned long ulVal; dVal=iVal*ulVal; //iVal被转换为unsigned long型与ulVal进行乘法运算 //乘法运算的结果被转换为double型赋值给dVal dVal=ulVal+fVal; //ulVal被转换为float型与fVal进行加法运算 //加法运算的结果被转换为double型赋值给dVal
3. 应用举例
【例2.5】 将字符数据与整数进行算术运算。
#include <iostream.h> int main() { char c1,c2; c1 = 'a'; c2 = 'b'; c1=c1 −32; c2=c2 −32; cout<<c1<<" "<<c2<<endl; }
程序运行结果为:
分析:字符数据与数值直接进行算术运算,是利用字符的 ASCII 码运算的。因为字符'a'和'b'的ASCII码为97和98,'a'−32得到整数65,'b'−32得到整数66。将65和66分别存放在c1、c2中,由于c1、c2是字符变量,因此用cout输出c1、c2时,得到字符A和B(A的ASCII码为65,B的ASCII码为66)。