ps:答案是我的在学习过程当中书写,可能存在错漏之处,仅做参考。
做者:cosefy
Date: 2020/1/9ios
第二章:变量和基本类型函数
练习2.1:学习
练习2.2:指针
利率:double
本金:long long
付款:long doublecode
练习2.4:
对象
练习2.6:blog
int month=9,day=7;
month,day被定义为十进制类型的整形数。ip
int month=09,day=07;
month,day被定义为八进制类型的整形数,但month表示出错,数字9不在八进制表示形式中。
练习2.8:input
#include<iostream> int main() { std::cout << "2\x4d\n2\t\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:
练习2.28:
练习2.29:
练习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。