《C++ Primer 4 Answer Book》 整理[2]——第2章 变量和基本类型

来源:互联网 发布:刀剑神域轻小说软件 编辑:程序博客网 时间:2024/06/05 18:31

2     变量和基本类型

        22.1int,longshort类型之间有什么差别?

        答:它们的最小存储空间不同,分别为16位、32位和16位。一般而言,short类型为半个机器字长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机器中,int类型和long类型的字长通常是相同的)。因此,它们表示的范围不同;

        

        32.3如果在某机器上short类型占16位,那么可以赋给short类型的最大数是什么?unsignedshort类型的最大数又是什么?

        答:可以赋给short类型的最大数是2^15-1,即32767;而unsigned short类型的最大数为2^16-1,即65535

 

        42.4当给16位的unsignedshort对象赋值100000时,赋的值是什么?

        答:100000超过了16位的unsigned short类型的表示范围,编译器对其二进制表示截取低16位,相当于对65536求模,得34464

 

        52.5float类型和double类型有什么差别?

        答:二者存储的位数不同(一般而言,float类型为32位,double类型为64位),因而取值范围不同,精度也不同(float类型只能保证6位有效数字,而double类型至少能保证10位有效数字);

        

        62.7解释下列字面值常量的不同之处:L’a’,L”a”,012,0xC,3.14,3.14f,3.14L-10u,-10e-2;

        答:L’a’wchar_t型字面值;

L”a”为宽字符串字面值;

012为八进制表示的int型字面值;

0xC为十六进制表示的int型字面值;

3.14double型字面值;

3.14ffloat型字面值;

3.14Llong double型字面值;

                  -10uunsigned int型;

                  -10e-2double型;

        

        72.12区分左值和右值

        答:左值就是变量的地址,或者是一个代表“对象在内存中的位置”的表达式;

                  右值就是变量的值;

 

        82.16假设calc是一个返回double对象的函数,下面哪些是非法定义?

                  a)int car=1024,auto=2048;:非法,auto是关键字;

                  b)int ival=ival; :语法没有错,但是这个初始化没有实际意义,ival仍是未初始化的。

                  c)std::cin>>int input_value;:非法,>>运算符后面不能进行变量定义。

                  d)double salary=wage=9999.99:同一定义语句不同中不同变量的初始化应分别进行;

                  e)double calc=calc();

 

        92.17下列变量的初始值(如果有)是什么?

                  std::Stringglobal_str;

                  intglobal_int;

                  intmain(0

                  {

                           intlocal_int;

                           std::Stringlocal_str;

                           return0;

                  }

        答:global_strlocal_str的初始值均为空字符串,global_int的初始值为0local_int没有初始值;

 

        102.18解释下列例子中的name的意义:

                  externstd::String name;  说明语句,说明std::String变量name在程序的其他地方定义;

                  std::Stringname(“abc”);  定义语句,定义了std::String变量name,并将name初始化为”abc”;

                  externstd::String name(“abc”); 定义语句,定义了std::String变量name,并将name初始化为”abc”.但是这个语句只能出现在函数外部(即,name)是一个全局变量);

 

        112.23下列哪些语句合法?

                  a)const int buf;  不合法,因为定义const变量(常量)时必须进行初始化;

                  b)  int cnt=0;

                           constint sz=cnt;  合法;

                  c)不合法,因为修改了const变量sz的值;

                  d)int &rvall=1.01;  不合法,因为rvall是一个非const引用,非const引用不能绑定到右值,而1.01是一个右值;

        

122.32下列声明和定义哪些应该放在头文件中?哪些应该放在源文件中?

        a) int var;

        b) const double pi =3.1416;

        c) extern inttotal=255;

        d) const doublesq2=squt(2.0);

答:(a),(c),(d)应该放在源文件中,因为(a)(c)是变量定义,定义通常应该放在源文件中。(d)中的const变量sq2不是常量表达式的初始化,所以也应该放在源文件中。

        (b)const变量pi是用常量表达式初始化的,应该放在头文件中;