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

练习2.11 指出下面的语句是声明还是定义:

  • (a) extern int ix = 1024;
  • (b) int iy;
  • © extern int iz;

a 声明+定义

b 声明+定义

c 声明

练习2.12 请指出下面的名字中哪些是非法的?

  • (a) int double = 3.14;
  • (b) int _;
  • (c) int catch-22;
  • (d) int 1_or_2 = 1;
  • (e) double Double = 3.14;

a 非法,与保留字重名

b 合法

c 非法,使用了非法字符

d 非法,以数字开头

e 合法

练习2.13 下面程序中j的值是多少?

int i = 42;
int main()
{
     
    int i = 100;
    int j = i;
}

100 局部变量i覆盖了全局i。

练习2.14 下面的程序合法吗?如果合法,它将输出什么?

int i = 100, sum = 0;
    for( int i = 0; i != 10; ++i)
        sum += i;
    std::cout<< i << ' ' << sum << std::endl;

合法,100 45。

练习2.15 下面的哪个定义是不合法的?为什么?

(a) int ival = 1.01;(b) int &rval1 = 1.01;© int &rval2 = ival;(d) int &rval3;

b不合法,引用必须绑定在对象上;d不合法,引用必须初始化

练习2.16 考察下面的所有赋值然后回答:哪些赋值是不合法的?为什么?哪些赋值是合法的?它们执行了哪些操作?

int i = 0, &r1 = i; double d = 0, &r2 = d;
- (a) r2 = 3.14159;
- (b) r2 = r1;
- (c) i = r2;
- (d) r1 = d;

a合法,给d赋值为3.14159;b合法,给d赋值为i(会自动转换 int->double);c合法,给i赋值为d(会发生double->int,小数点后数据丢失);d合法,同c

练习2.17 执行下面的代码段将输出什么结果?

int i, &ri = i;
i = 5; ri = 10;
std::cout << i << " " << ri << std::endl;

10 10

练习2.18 编写代码分别改变指针的值以及指针所指对象的值。

    int ival = 1024;
    int *p = &ival;
    int *p1 = nullptr;
    p1 = p;

练习2.19 说明指针和引用的主要区别

1.引用是另一个对象的别名,而指针本身就是一个对象。

2.引用在定义时必须初始化,并且在其生命周期内只能绑定一个对象;指针不必在定义时初始化,也可以重新赋值使其指向其他对象。

练习2.20 请叙述下面这段代码的作用。

int i = 42;
int *p1 = &i; 
*p1 = *p1 * *p1;

指针p1指向对象i,然后通过指针p1给对象i重新赋值为42*42(1764)

你可能感兴趣的:(C++,Primer,5th,课后练习汇总)