zoukankan      html  css  js  c++  java
  • 《C++Primer》第五版习题答案--第二章【学习笔记】

    C++Primer第五版习题解答---第二章

    ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考。
    作者:cosefy
    Date: 2020/1/9

    第二章:变量和基本类型

    练习2.1:

    • 类型int,long,long long和short的主要区别是所占据的比特数不同。
    • 无符号数的所有比特都用来表示数据,只可以表示非负数;有符号数可以表示负数,8比特signed int 的表示区间是-128~12。
    • double比float类型精度更高,一般双精度浮点数和单精度浮点数的计算代价相差无几。

    练习2.2:

    利率:double
    本金:long long
    付款:long double

    练习2.4:

    练习2.6:

     int month=9,day=7;
    

    month,day被定义为十进制类型的整形数。

     int month=09,day=07;
    

    month,day被定义为八进制类型的整形数,但month表示出错,数字9不在八进制表示形式中。
    练习2.8:

    #include<iostream>
    int main() 
    {
    	std::cout << "2x4d
    2	x4d" << std::endl;
    	return 0;
    }
    

    练习2.9:

    std::cout << int input_value;
    

    错误原因:输出中不允许使用类型名;并且使用了未初始化的变量input_value。

    int i = { 3.14 };
    

    错误原因:初始值存在丢失数据的风险,且使用列表初始化,则编译器会报错。

    double salary = wage = 9999.99;
    

    错误原因:wage变量没有先被定义。

    int i = 3.14;
    

    没有错误。

    练习2.10:

    #include<iostream>
    
    std::string global_str;   //默认初始化为空串
    int global_int;           //内置类型在函数体外定义默认初始化为0
    int main() 
    {
    	int local_int;        //内置类型在函数体内定义,将不被初始化
    	std::string local_str;//默认初始化为空串
    	std::cout << global_str << std::endl;
    	std::cout << global_int << std::endl;
    	//std::cout << local_int << std::endl;
    	std::cout << local_str << std::endl;
    	return 0;
    }
    
    

    运行结果:

    练习2.12:

    a,c,d是非法的。

    练习2.13:

    j的值是100

    练习2.14:

    程序合法。
    输出结果如下图:

    练习2.15:

    b,d不合法。

    练习2.16:

    赋值都是合法的,但会发出从double型到int型数据可能会丢失数据的警告。

    练习2.17:
    运行结果:

    练习2.18:

    #include<iostream>
    int main() 
    {
    	int a = 10, * p = &a;
    	*p = 20;
    	std::cout << *p << std::endl;
    	p = 0;
    	std::cout << p << std::endl;
    	return 0;
    }
    

    练习2.19:

    引用本身不是对象,引用绑定了对象就无法再更改;指针本身就是对象,并且可以指向新的对象。

    练习2.20:

    指针p1指向变量i,然后修改p1指向的对象的值,值修改为原对象值的平方。

    练习2.21:

    #include<iostream>
    int main() 
    {
    	int i = 0;
    	double* dp1 = &i; //非法,int类型的对象不能初始化double类型的指针
    	int* dp2 = i;     //非法,表示形式错误。
    	int* dp3 = &i;    //合法
    	return 0;
    }
    

    练习2.22:

    if(p) //指p的值是否为0
    if(* p) //判断指针p指向的对象的值是否为0

    练习2.24:

    void是一种特殊的指针类型,可以存放任意类型的对象。

    练习2.25:

    (a) int * p,i,&r=i;
    

    ip是int型指针,未指向对象;i是int型数据,未初始化;r是i的int型引用。

    (b) int i,* ip=0;
    

    i是int型数据,未初始化;ip是int型指针,是个空指针。

    (c) int * ip,ip2;
    

    ip,ip2都是int型指针,未指向对象,

    练习2.27:

    • 非法,r的int型引用需要是一个对象
    • 合法
    • 合法
    • 合法
    • 合法
    • 非法,r2需要指定明确的值
    • 合法

    练习2.28:

    • 非法,常量指针cp需要指定初始化的值
    • 非法,常量指针p2需要指定初始化的值
    • 非法,整型常量ic需要初始化
    • 非法,常量指针p3未初始化
    • 非法,指向常量的指针p未初始化

    练习2.29:

    • 合法
    • 合法
    • 非法,ic是常量数据,p1不是常量定义的
    • 非法,ic是底层const,p3是顶层const
    • 非法,p2是顶层const,p2的值不可改变
    • 非法,ic是整型常量,不可改变

    练习2.30:

    p2底层const,p3顶层const。

    练习2.36:

     #include<iostream>
    int main() 
    {
    	int a = 3, b = 4;
    	decltype(a) c = a;    //c是int型
    	decltype((b)) d = a; //d是int引用
    	++c;
    	++d;
    	std::cout << c<<std::endl;
    	std::cout << d << std::endl;
    	return 0;
    }
     
    

    c=4,d=4。

    练习2.37:

    c是int型,d是int&。
    结果:a=4,b=4,c=3,d=4。

  • 相关阅读:
    Flink之DataStreamAPI入门
    Spark底层原理简化版
    Spark调优
    Flink架构及其工作原理
    Kafka总结
    leetcode数学相关
    程序员的修炼之道5
    数据库连库建表
    完成了web系统
    即将完成大型web系统
  • 原文地址:https://www.cnblogs.com/cosefy/p/12173495.html
Copyright © 2011-2022 走看看