55
66解:
77
8- C++ 规定 short 和 int 至少16位,long 至少32位,long long 至少64位。 带符号类型能够表示正数、负数和 0 ,而无符号类型只能够表示 0 和正整数。
8+ C++ 规定 short 和 int 至少16位,long 至少32位,long long 至少64位。 带符号类型能够表示正数、负数和 0 ,而无符号类型只能够表示 0 和正整数。浮点数的取值范围和精度不同,计算效率也有差异。
99
1010## 练习2.2
1111计算按揭贷款时,对于利率、本金和付款分别应选择何种数据类型?说明你的理由。
@@ -243,7 +243,7 @@ std::cout << i << " " << ri << std::endl;
243243
244244解:
245245
246- 输出:10, 10
246+ 输出:10 10
247247
248248## 练习2.18
249249编写代码分别改变指针的值以及指针所指对象的值。
@@ -313,7 +313,7 @@ if (*p) // ...
313313
314314解:
315315
316- 不能,因为首先要确定这个指针是不是合法的,才能判断它所指向的对象是不是合法的 。
316+ 能,可以使用try catch的异常处理来分辨指针p是否指向一个合法的对象,但通过普通控制结构无法实现 。
317317
318318## 练习2.24
319319在下面这段代码中为什么 p 合法而 lp 非法?
@@ -363,7 +363,7 @@ int *const p2 = &i2; // 合法,常量指针
363363const int i = -1 , &r = 0 ; // 合法
364364const int *const p3 = &i2; // 合法
365365const int *p1 = &i2; // 合法
366- const int &const r2; // 不合法, r2 是引用,引用没有顶层 const
366+ const int &const r2; // 不合法, r2 是引用, 引用自带顶层 const, 第二个const写法多余但合法, 但引用需要初始化.
367367const int i2 = i, &r = i; // 合法
368368```
369369
@@ -387,9 +387,9 @@ const int *p; // 合法. 一个指针,指向 const int
387387i = ic; // 合法, 常量赋值给普通变量
388388p1 = p3; // 不合法, p3 是const指针不能赋值给普通指针
389389p1 = ⁣ // 不合法, 普通指针不能指向常量
390- p3 = ⁣ // 合法 , p3 是常量指针且指向常量
391- p2 = p1; // 合法, 可以将普通指针赋值给常量指针
392- ic = *p3; // 合法 , 对 p3 取值后是一个 int 然后赋值给 ic
390+ p3 = ⁣ // 不合法 , p3 是常量指针且指向常量, 故p3 不能被修改, 本句赋值语句正在修改
391+ p2 = p1; // 不合法, p2是常量指针, 有顶层const, 不能被修改
392+ ic = *p3; // 不合法 , 对 p3 取值后是一个 int 然后赋值给 ic, 但ic是常量不能被修改
393393```
394394
395395## 练习2.30
@@ -425,7 +425,11 @@ int null = 0, *p = null;
425425```
426426解:
427427
428- 合法。指针可以初始化为 0 表示为空指针。
428+ 非法,即使int的值恰好是0,也不能直接给指针赋值int变量。应改为
429+ ``` cpp
430+ int null = 0 , *p = &null;
431+ ```
432+ 而且应该注意到,null都是小写,并不是关键字或者预处理变量。
429433
430434## 练习2.33
431435利用本节定义的变量,判断下列语句的运行结果。
0 commit comments