2.1

int,long long ,short 可表示范围和占用内存空间不同。具体与计算机有关。

无符号类型只能表示0和正数,带符号类型可以表示负数,0,正数。

float是单精度,一般占用4个字节,double是双精度,一般占用8个字节,它们可表示的数据范围也不相同。

2.2

利率用double,本金和付款用int

2.3

    unsigned u=,u2=;
    cout<<u2-u<<endl;
    cout<<u-u2<<endl;
    ,i2=;
    cout<<i2-i<<endl;
    cout<<i-i2<<endl;
    cout<<i-u<<endl;
    cout<<u-i<<endl;

输出

32
4294967264
32
-32
0
0

但凡unsigned类型涉及负数运算都会出现意外的情况(具体查询整数在计算机内的表示方法),比如上面第2个。int与unsigned计算会将int转化为unsigned。

2.4

2.5

(a)。

'a' 是单字符字面值,char

L'a'是宽字符字面值,wchar_t

"a"是字符串字面值

L"a"宽字符型字符串字面值

wchar_t占16位,char占8位

(b)。

10是int字面值

10u是unsigned字面值

10L是long字面值

10LL是longlong字面值

012是八进制,等于十进制下的10

0xC是十六进制,等于十进制下的12

(c)。

3.14浮点数字面值

3.14f是float字面值

3.14L是longdouble字面值

(d)。

10是int字面值

10u是unsigned字面值

10.浮点数字面值

10e-2浮点数字面值,等于0.01

2.6

上面一行定义的是十进制整型,下面一行定义的是八进制整型,因此int month=09的写法是错的。

2.7

(1)字符串常量

cout<<"Who goes with F\145rgus?\012";

输出Who goes with Fergus?

其中\145是‘e',\012是’\n'

(2)longdouble常量

(3)float常量

(4)longdouble常量

2.8略

2.9

    cin>>int inpu_value;//error:不能在读入的时候定义,只能读已经定义好的变量
    int i={3.14};//虽然编译通过,但是给了一warning,因为损失了精度!可能与编译器有关,有的可能会报错。
    double salary=wage=9999.99;//errer:wage未定义,不能连续定义!
    int j=3.14;//正确,虽然也损失了精度,但没有提示

2.10

local_int初值未知

global_int初值为0

global_str和local_str初值为空

2.11

(a)错误,既有extern又有初始值

(b)定义

(c)声明

2.12

(a)非法,double是c++关键字

(c)-不能出现在变量名中

2.13

j等于100

因为局部变量i隐藏了全局变量i

2.14

输出100 45。

2.15

(a)正确,发生隐式转化double转int

(b)错。普通引用不能绑定常量,而且数据类型也不符。

(c)正确

(d)错,引用未初始化。

2.16

(a)合法,double赋给double

(b)合法,int隐式转化成double

(c)合法,double隐式转化成int

(d)合法,double隐式转化成int

2.17

输出10 10.

因为ri是i的引用,改了i的值

2.18略

2.19

指针是对象,它指向的也是一个对象。

而引用不是对象,它绑定一个对象,是对象的一个别名,定义时必须初始化。

很多区别。。。

2.20

第一行:定义变量i=42

第二行:定义int指针指向i

第三行:通过指针修改i,使其等于42*42

2.21

(a)指向double的指针不能指向int变量

(b)错误。等号右侧缺少&。

(c)正确

2.22

如果p不是空指针。。

如果p指向的对象非空。。

2.23

在不用智能指针的前提下,定义的时候指针要初始化,释放内存后指针要置NULL。这样就可以通过检查指针是否为NULL来判断是否指向合法对象了。

2.24

void*p是一种特殊的指针类型,可以存放任意对象的地址。

*lp是指向long的指针而i是int,数据类型不符。

2.25

(a)ip是野指针,i的值是随机的,r绑定i。

(b)i的值是随机的,ip是空指针

(c)ip是野指针,ip2是int数据类型,值是随机的

2.26

(a)错,const变量必须初始化

(b)正确

(c)正确

(d)错。sz是指向常量对象的引用,不能修改对象的内容。

2.27

(a)&r=0,错误,普通引用不能绑定常量

(f)错误,不存在常量引用,而且也没用初始化

2.28

(a)不合法,*const需要初始化。

(b)不合法,*const需要初始化。

(c)不合法,ic是常量需要初始化。

(d)不合法,常量指针需要初始化

(e)不合法,常量指针对象初始化。

2.29

这里要注意const修饰的是数据类型还是声明符。

如*、&(类型修饰符)都只是声明符的一部分,不属于数据类型的部分。类型修饰符不作用于本次定义的全部变量,只作用于修饰的变量。

(a)合法,常量可以拷贝给非常量

(b)不合法,p3有底层const,不能赋给p1

(c)不合法,ic是常量,而p1是普通指针,不能指向它

(d)不合法,p3是常量指针,不能再指向其他对象

(e)不合法,p2是常量指针,不能再修改它指向的地址

(f)不合法,ic是常量,不能修改

2.30

    ;//顶层const
    int v1=v2;
    int *p=&v1,&r1=v1;
    const int *p2=&v2,*const p3=&v1,&r2=v2;
    //p2是底层const,p3是顶层、底层const,r2底层const

2.31

(1)。合法

(2)。p1=p2不合法,p2具有底层const不能赋给p1;p2=p1,合法,没有const的指针可以赋给有底层const的指针

(3)。p1=p3不合法,p3具有底层const;p2=p3合法,两个指针都有底层const

2.32

不合法。不能将非地址的数据类型赋给指针,即使该变量值等于0也不行。

*p=NULL;

2.33

a是int,赋值合法。

b是int,赋值合法。auto会忽略顶层const而保留底层const

c是int,赋值合法。从引用中得到的是int。

d是一个int*,赋值不合法。

e是一个指向常量的指针,具有底层const,赋值不合法

g是常量int引用,赋值不合法。

auto可以从指针中得到指针变量,但是不能从引用中得到引用。所以我们可以使用auto&来定义引用。

2.34略

2.35

auto &k=10;这样是不行的

但是const auto &k=10;就可以

j是const int。

k是指向常量对象的引用。(前面不加const效果是一样的)

p是指向常量对象的指针

j2是常量int。

k2是指向常量对象的引用。

2.36

    ,b=;
    decltype(a) c=a;//c是int
    decltype((b)) d=a;//d是a的引用
    ++c;
    ++d;
    cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl

2.37

对表达式使用decltype会得到普通引用

    ,b=;
    decltype(a) c=a;//c是int
    decltype((a=b)) d=a;//d是a的引用
    c=;
    d=;
    cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;

2.38

auto根据定义时的表达式决定变量类型同时初始化变量

decltype根据表达式决定变量类型但不同时初始化变量

等等。。

《C++primer》v5 第2章 变量和基本类型 读书笔记 习题答案的更多相关文章

  1. 《C++primer》v5 第3章 字符串、向量和数组 读书笔记 习题答案

    本章问题 1.char *p="hello world";与char p[]="hello world"的问题. 简单说前者是一个指向字符串常量的指针,后者是一 ...

  2. C++ Primer 5th 第2章 变量和基本类型

    *****代码在Debian g++ 5.3.1 / clang++ 3.8(C++11)下编写调试***** 由于部分编译器对标准遵循的不同以及自身额外的扩展,本章书中的少数知识点与实际实现存在偏差 ...

  3. 《C++primer》v5 第8章 IO库 读书笔记 习题答案

    8.1.8.2 这一章不咋会啊.. istream &read(istream &is) { int a; auto old_state=is.rdstate(); is.clear( ...

  4. 《C++primer》v5 第7章 类 读书笔记 习题答案

    7.1.7.2.7.3 #include<iostream> #include<cstdio> #include<vector> #include<strin ...

  5. 《C++primer》v5 第6章 函数 读书笔记 习题答案

    6.1 实参是在函数调用处填写的参数.形参是在函数体使用的参数. 实参是形参的初始值. 具体参见:http://blog.163.com/zhengguo_li/blog/static/7030148 ...

  6. 《C++primer》v5 第5章 语句 读书笔记 习题答案

    5.1 空语句只有一个";".如果什么也不想做可以使用空语句. 5.2 用花括号{}括起来的叫块,也叫复合语句.有多条语句作用在同一个作用域时,需要用花括号括起来. 5.3 降低了 ...

  7. 《C++primer》v5 第4章 表达式 读书笔记 习题答案

    4.1 105 4.2 *vec.begin()=*(vec.begin())//先调用点运算符,再解引用 *vec.begin()+1=(*vec.begin())+1//先解引用,再加一 4.3略 ...

  8. 《C++primer》v5 第1章 开始 读书笔记 习题答案

    从今天开始在博客里写C++primer的文字.主要以后面的习题作业为主,会有必要的知识点补充. 本人也是菜鸟,可能有不对之处,还望指出. 前期内容可能会比较水. 1.1略 1.2略 1.3 cin和c ...

  9. C++ Primer 读书笔记 第2章 变量和基本类型

    C++ Primer 第二章 变量和基本类型 2.1 基本内置类型 C++定义了一组表示整数.浮点数.单个字符和布尔值的算术类型(arithmetic type),此外还定义了Void类型. 算术类型 ...

随机推荐

  1. web页面状态

    200 :表示请求成功,服务器已处理 201 :表示服务器端请求被创建, 202 :表示服务器端请求已经被接收,但未处理完成 400 :表示错误的请求 404:表示请求的资源未找到. 405:表示没有 ...

  2. C#使用DataSet Datatable更新数据库的三种实现方法

    本文以实例形式讲述了使用DataSet Datatable更新数据库的三种实现方法,包括CommandBuilder 方法.DataAdapter 更新数据源以及使用sql语句更新.分享给大家供大家参 ...

  3. 关于在官网上查看和下载特定版本的webrtc代码

    注:这个方法已经不适用了,帖子没删只是留个纪念而已 gclient:如果不知道gclient是什么东西 ... 就别再往下看了. 下载特定版本的代码: #gclient sync --revision ...

  4. Oracle分组排序查询

    用sql查询每个分组中amount最大的前两条记录: SELECT *FROM HW trWHERE(SELECT COUNT(*) FROM HW WHERE tr.DEPID=DEPID AND ...

  5. 如何使用VS2013对C++进行编程

    https://msdn.microsoft.com/zh-cn/library/bb384842.aspx

  6. linux centos 6.5 运行MySQL Workbench 6.0找不到 libmysqlclient.so.16和libmysqlclient_r.so.16

    找到已安装mysql/lib目录下有类似文件: -rw-r--r-- root root 12月 : libmysqlclient.a lrwxrwxrwx root root 12月 : libmy ...

  7. 复旦大学2014--2015学年第二学期高等代数II期末考试情况分析

    一.期末考试成绩班级前几名 钱列(100).王华(92).李笑尘(92).金羽佳(91).李卓凡(91).包振航(91).董麒麟(90).张钧瑞(90).陆毕晨(90).刘杰(90).黄成晗(90). ...

  8. linux 修改home目录下的中文目录名为英文

    编辑home/下的 .config/user-dirs.dirs,把所有的中文名称修改为英文名称 在home目录下创建对应的英文名称路径 运行 xdg-user-dirs-update 重启机器

  9. HDU 5842 Lweb and String(Lweb与字符串)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  10. ASP.NET 配置KindEditor文本编辑器

    ASP.NET 配置KindEditor文本编辑器 跟着这篇博客做了两个小时,只搞出了下面这么个东西. 时间浪费在了原博客里这样的一句话:将kindeditor/asp.net/bin/LitJSON ...