C++程序设计与案例分析
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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)。