c++primer——第五版——第二章习题解析

本文详细介绍了C++中的各种数据类型,包括整型、浮点型、字符型及其对应的大小,探讨了有符号与无符号数的区别,以及类型转换的规则。同时,深入解析了指针与引用的概念,包括它们的定义、使用场景及注意事项,帮助读者掌握C++中的内存管理技巧。
摘要由CSDN通过智能技术生成

2.1:

int:  2字节(现在的编译器大多和long一样的尺寸,具体可以用sizeof()关键字求得其长度)

long:4字节

long long :8字节

short:2字节

无符号:只能表示大于0的数值

有符号:可以表示负数,0,正数

float & double:(执行浮点数最好用double.事实上,对于某些机器来说,双精度运算甚至比单精度快) 

2.2:

利率:double                      本金:     double                    付款: double

2.3:当一个算数表达式中既有无符号又有int型时,那个int值就会转换为无符号数

2.4:  

2.5:(a)字符,宽字符,字符串,宽字符串

            语法:前缀: u          unicode16字符          char16_t

                                  U          unicode32字符          char32_t

                                  L           宽字符                       wchar_t

                                  u8         UTF-8                        char

                       后缀:u/U        unsigned                   f/f               float

                                 l/L           long                           ll/LL           long long            

2.6:      八进制:0                         十六进制:0x

2.9:    a、(输入时才定义是不合法的)不正确,需在cin之前定义input_value

          b、i强制类型转换成3

          c、wage未定义

          d、i会被强制类型转换成3

           需要注意的就是类型转换的问题,还有变量使用之前需要先定义声明

2.10:

       这里涉及到的就是默认初始化的问题

      如果在定义变量时没有指定初值,那么变量会被默认初始化。

      三条性质:1、定义在任何函数体外的变量会被初始化为0。   2、定义在函数体内部的变量不会被初始化。 3、类的对象未被初始化,则初值由类决定。

    所以第一个变量是一个空字符串,第二个变量是0,第三个变量不确定,第四个变量因为在std作用域内,而std作用域内有其定义,所以是个空字符串。

2.11:   定义   定义  声明

2.12:a:非法    b:正确    c:非法     d:不能以数字开头    e:正确

2.13:100

2.14:合法,与上题类似,但不同的是:显示访问i变量会访问到全局变量上  std::cout<<i = 100   sum = 45

2.15:

a:合法;b:不合法:引用只用用对象,不能用字面值或某个表达式的计算结果绑定在一起

c:合法:d:不合法:引用定义时必须初始化

2.16:

a:合法  d的值变为3014159

b:合法  强制类型转换

c:合法  强制类型转换

d:合法  强制类型转换

2.17:

10      10

ri就是i的别名,ri = 10,i的值自然为10

2.18:

温故知新:

int i =10;int &j = i;  //&符号紧随类型名出现,它是声明的一部分,j是一个引用。
int *p;     //*符号紧随类型名出现,它是声明的一部分,p是一个指针。
p = &i;    //&符号出现在表达式之中,是一个取地址符号。
*p = i;    //*符号出现在表达式之中,是一个解引用符
int &j2 = *p;   //&是声明的一部分,*是解引用符。

故:改变指针的值就是重新为指针赋值一个新的地址值即可(int *p;     int a = 1,b = 2;  p = &a;  p = &b;(最终将p指针的值改变为b         的地址) 

     指针所指对象赋值:用解引符来赋值:*p = 3;

2.19:

1:指针本身就是一个对象,允许指针之间的拷贝和赋值,也可以在其生命周期指向不同的对象。而引用不行,引用不是一个对象,一旦定义引用,往后便不能再绑定其他对象

2:指针无需在定义时赋值。

2.20:

int i = 42;//定义了一个整型变量并赋初值为42;
int *p1 = &i;//定义了一个整型指针p1,并把i的地址赋值给p1;
*p1 = *p1 * *p1;//就是p1指针所指的对象i赋值为 其对象i值的平方

2.21

1:非法定义,类型不一致

2:非法定义,没有取址操作符

3:合法定义。

2.22

第一个判断的是:P指针是否为空指针

第二个判断的是:P指针所指向的对象是否为0

2.23:   不可以!!

2.24:     void *是一种特殊的类型,可以存放任意对象的地址。而long *只能存放long型对象的地址

2.25:

1:ip是一个int类指针型的,i是一个int型的变量,r是一个int型的引用。

2;i是一个int型的变量,ip是一个空指针。

3:ip是一个int类型的指针,ip2是一个int类型的变量

2.26:

涉及知识点:const表示的不可改变的量!:const用在变量定义时的类型前表示该变量不可改变,注意:该变量必须初始化(可以在运行时初始化)。

a:不合法,变量未初始化。

b:合法

c:合法

d:不合法,变量sz是一个const变量,不能被改变

2.27:

        (a):    不合法:引用类型的初始值必须是一个对象

        (b):   合法:是一个常量指针

        (c):   合法: r是一个常量的引用,与(a)不同

        (d):   合法:p3是一个常量指针

        (e):   合法:p1为指向常量的指着

       (f):     不合法:如果是引用,就必须初始化

       (g):    合法:i2是一个int型常量,常量r引用初始化为i(不许通过r修改i的值)

2.28:   

        (a)不合法:定义了一个整型变量i, ,常量指针cp未初始化

         (b)不合法,常量指针p2未初始化

          (c)合法:常量引用 ic未初始化

           (d)   不合法:指向常量对象的常量指针p3未初始化

           (e)   合法:指向常量的指针

2.29:       

            a:合法

            b:不合法,const int 和 int 不是一个类型,指向常量的指针在赋值时必须类型一致

            c:和b相同

            d:不合法,p3是一个常量指针,不能被再次赋值

            e:不合法,p2是一个常量指针,不能被再次赋值

            f:不合法,ic是个常量,不能被再次赋值

2.30:

            v2是顶层const;

            p2,r1是底层const;

             p3最左是底层,右侧是顶层const;

            其他都不是const;

2.31:

  知识点:顶层const的拷贝不受限制,但是底层const的拷贝的对象必须具有相同的底层const资格。一般来说:非常量可以赋值给常量,反之则不行

a:合法;
b:不合法,p1是非常量,p2是常量,不能进行赋值操作;
c:合法;
d:不合法,p3既是底层也是顶层const,所以都得考虑到;
e:合法;

2.32:

      不合法:空指针:可以直接给指针字面值为0来赋为空,也可直接赋为NULL,其实NULL的值就是为0,但不能直接给指针赋一个变量,      哪怕是整型且值为0也不可
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值