《C++ Primer》5th 课后练习 第二章 变量和基本类型 21~30

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_40758751/article/details/101633642

练习2.21 请解释下述定义。在这些定义中有非法的吗?如果有,为什么?

int i = 0;
(a) double* dp = &i;
(b) int *ip = i;
(c) int *p = &i;

a非法,double型指针指向了int型对象;b非法,不能将int型变量赋给指针;c合法

练习2.22 假设 p 是一个 int 型指针,请说明下述代码的含义。

if (p) // ...
if (*p) // ...

1.判断指针p是否指向nullptr(空指针),是为false,否为true。2.判断指针p指向的变量的值是否为0

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

不能,判断指针是否指向了一个合法的对象首先需要知道指针的类型,还要知道指针指向的地址所存储的对象类型,并且还要知道指针指向的地址所存储的对象是否是所期望的对象。这几步在程序中极难做到,所以指针安全需要程序员正确使用指针。

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

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

指针p的类型为void* 他可以用于存放任何对象的地址。指针lp的类型为long,与变量i的类型int不符。

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

**(a) int* ip, i, &r = i;(b) int i, *ip = 0;© int* ip, ip2;**a,ip为int型指针,i为int型对象,r为int型引用并与对象i绑定。b,i为int型对象,ip为int型空指针。c,ip为int型指针,ip2为int型对象。

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

const int buf;      // 不合法, const 对象必须初始化
int cnt = 0;        // 合法
const int sz = cnt; // 合法
++cnt; ++sz;        // 不合法, const 对象不能被改变

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

int i = -1, &r = 0;         // 不合法, r 必须引用一个对象
int *const p2 = &i2;        // 合法
const int i = -1, &r = 0;   // 合法
const int *const p3 = &i2;  // 合法
const int *p1 = &i2;        // 合法
const int &const r2;        // 不合法, r2未绑定一个常量对象或者常量
const int i2 = i, &r = i;   // 合法

练习2.28:说明下面的这些定义是什么意思,挑出其中不合法的。

int i, *const cp;       // 不合法, const 指针必须初始化
int *p1, *const p2;     // 不合法, const 指针必须初始化
const int ic, &r = ic;  // 不合法, const int 必须初始化
const int *const p3;    // 不合法, const 指针必须初始化
const int *p;           // 合法. 一个指针,指向 const int

练习2.29 假设已有上一个练习中定义的那些变量,则下面的哪些语句是合法的?请说明原因。

i = ic;     // 合法, 常量赋值给普通变量
p1 = p3;    // 不合法, p3 是const int型指针不能赋值给int型指针
p1 = ⁣   // 不合法, int型指针不能指向const int型对象
p3 = ⁣   // 不合法, p3是一个常量指针,不能被再次赋值
p2 = p1;    // 不合法, p2是一个常量指针,不能被再次赋值
ic = *p3;   // 不合法, ic是个常量,不能被再次赋值

练习2.30 对于下面的这些语句,请说明对象被声明成了顶层const还是底层const?

const int v2 = 0; int v1 = v2;
int *p1 = &v1, &r1 = v1;
const int *p2 = &v2, *const p3 = &i, &r2 = v2;

v2顶层const,p2底层const,p3顶层const且是底层const

猜你喜欢

转载自blog.csdn.net/qq_40758751/article/details/101633642