c++-primer-3变量和基本类型

变量和基本类型

练习2.23:给定指针p,你能知道它是否指向了一个合法的对象吗?如果能,叙述判断的思路;如果不能,也请说明原因。

不能,因为信息量不足。

练习2.24:在下面这段代码中为什么p合法而lp非法?

int i = 42; void *p = &i; long *lp = &i;

因为类型是void的指针可以指向任何类型的对象,而long的指针只能指向long类型的对象。

练习2.25:说明下列变量的类型和值。

1
int* ip, i, &r = i; (b) int i, *ip = 0; (c) int ip, ip2;

(a) ip是一个指向int的指针,i是一个int型变量,r是一个指向i的引用。如果在块内定义它们,ip和i的值都是未定义的,否则是0。

(b) i是一个int型变量,ip是一个指向int的指针。如果在块内定义它们,i的值是未定义的,否则是0。ip的值是0。

(c) ip是一个指向int的指针,ip2是一个int型变量。如果在块内定义它们,ip和ip2的值都是未定义的,否则是0。

练习2.26:下面哪些句子是合法的?如果有不合法的句子,请说明为什么?

1
2
(a) const int buf;		(b) int cnt = 0;
(c) const int sz = cnt; (d) ++cnt; ++sz;

(a) 不合法,必须初始化一个const变量。
(b) 合法。
(c) 合法。
(d) 不合法,不能修改一个const变量(sz)。

练习2.27:下面哪些初始化是合法的?请说明原因。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
(a) int i = -1, &r = 0;			(b) int *const p2 = &i2;
(c) const int i = -1, &r = 0; (d) const int *const p3 = &i2;
(e) const int *p1 = &i2; (f) const int &const r2;
(g) const int i2 = i, &r = i;
/*
(a) 非法,r是一个普通引用,不能绑定到字面量。
(b) 合法,但前提是i2不是const int。
(c) 合法。r是一个常量引用,可以绑定到字面量。
(d) 合法。
(e) 合法。
(f) 非法。r2是一个引用,必须初始化,且没有const引用,只有指向常量的引用。
(g) 合法。
*/
int main()
{
//const int i2 = 0;
int i2 = 0;
int *const p2 = &i2;
*p2 = 1; // just use p2 to ignore warning

//const int &const r2;

return 0;
}
Contents
|