4.1

105

4.2

*vec.begin()=*(vec.begin())//先调用点运算符,再解引用

*vec.begin()+1=(*vec.begin())+1//先解引用,再加一

4.3略?

4.4

(12/3*4)+(5*15)+(24%4/2)=91

4.5

(a)-86(b)-16

(c)0 (d)0

4.6

n%2

4.7

溢出:计算结果超出该数据类型所能表示的范围

2147483647+1

1U-2

...

4.8

比较低。。

4.9

首先判断cp是否为空指针,若非空指针则判断cp指向的是否是空字符串

4.10

    int val;
    );

4.11

int main()
{
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    if(a>b&&b>c&&c>d)
        cout<<"Yes"<<endl;
    else
        cout<<"No"<<endl;
    ;
}

4.12

由于<优先级高于!=,所以先执行j<k返回一个bool类型,可能是0或1,再执行!=运算。最终返回一个bool运算结果,可能是0或1。

4.13

(a)d=3,i=3 因为是从右往左执行的

(b)i=3,d=3.5

4.14

第一种将报错,42是常量,不能被赋值

第二种,该表达式返回42,为真,但是可能并非设计者原意

4.15

指针数据类型与int和double都是不相容的,不能这样赋值。

正确答案:dval=ival=*pi=0;

4.16

(a)将先执行 !=,再执行=。

正解:if((p=getPtr())!=0)

(b)=是赋值,不是判断是否相等

正解:if(i==1024)

4.17

前置运算符,先求值再返回该对象用于左值运算对象

后置运算符,返回该对象的一个副本作为右值运算对象,再求值

4.18

使用前置运算符将不能输出第一个元素,而且会访问越界

另外,经测试,++*it和*++it是不一样的。前置可能导致死循环,因为只是给数值自加了。

4.19

(a)如果ptr不是空指针,那么判断ptr指向的是否是0,再将ptr指向下一个位置

(b)先判断ival是为是0,再将ival自加1,再判断ival是否为0。

(c)等价于vec[ival]<=vec[ival+1],++ival;

4.20

(a)合法。等价于*iter,iter++;

(b)非法。string类型不支持++运算。

(c)非法。先执行成员访问运算符,而iter没有empty这个成员,所以将报错。

(d)正确。等价于(*iter).empty()

(e)正确。等价于++(*iter)

(f)正确。等价于iter->empty(),iter++;

4.21

int main()
{
    vector<int> vec;
    int val;
    while(cin>>val)
        vec.push_back(val);
    for(auto &i:vec)
        )
            i=i*;
    for(auto i:vec)
        cout<<i<<endl;
    ;
}

4.22

int main()
{
    int val;
    while(cin>>val)
    {
        )?<=val&&val<=)?)?"fail":"pass";
        cout<<grade<<endl;
    }
    ;
}

明显if语句更好懂

int main()
{
    int val;
    while(cin>>val)
    {
        ) cout<<"high pass"<<endl;
        ) cout<<"fail"<<endl;
        else
        {
            <=val&&val<=) cout<<"low pass"<<endl;
            else cout<<"pass"<<endl;
        }
    }
    ;
}

4.23

由于加法运算优先级高于条件运算符,因此会先执行加法,得到一个string类型,而string与字符比较,会报错。

正解: string p=s+(s[s.size()-1]=='s'?"":"s");

4.24?

不是很懂结合律这块。留着以后研究。

4.25

不懂Latin-1字符集是什么。。

该表达式,第一步取反得到10001110

第二步左移6位得到10000000

4.26

unsigned int在不同机器上位数不同,不能确保一定可以表示30个学生

4.27

ul1=011

ul2=111

(a)011=3

(b)111=7

(c)1

(d)1

4.28

    cout<<"short:"<<sizeof(short)<<endl;
    cout<<"int:"<<sizeof(int)<<endl;
    cout<<"long:"<<sizeof(long)<<endl;
    cout<<"long long:"<<sizeof(long long)<<endl;
    cout<<"float:"<<sizeof(float)<<endl;
    cout<<"double:"<<sizeof(double)<<endl;
    cout<<"char:"<<sizeof(char)<<endl;

这是在我的机器上的输出:


4.29

int main()
{
    ];
    int *p=x;
    cout<<sizeof(x)<<" "<<sizeof(*x)<<" "<<sizeof(x)/sizeof(*x)<<endl;
    cout<<sizeof(p)<<" "<<sizeof(*p)<<" "<<sizeof(p)/sizeof(*p)<<endl;
    ;
}
sizeof(x)是一个大小为10的int数组的空间
sizeof(*x)是一个指向int的指针的空间
sizeof(p)是一个指向int的指针的空间
sizeof(*p)是一个int元素的空间
  

以上是输出

4.30

(a)sizeof (a+b)

(b)sizeof (p->mem[i])

(c)sizeof (a<b)  注意小于优先级比sizeof低

(d)sizeof (f())

4.31

后置会额外返回一个对象的副本,使用前置运算符更符合编程的初衷,效率也更高

4.32

遍历ia数组。

4.33

如果someValue为真,则++x,++y并返回自加以后的y。如果为假,则--x,--y并返回自减以后的y。

注意逗号运算符从左向右依次求值,最终返回右侧表达式的值

4.34

(a)float转为bool

(b)+:int转float,=float转double

(c)*:char转int,+int转double

4.35

(a)char转int,再转char?

(b)*int转double,-unsignedint转double,=double转float

(c)*unsignedint转float,float转double

(d)int转float,float转double,double转char

为避免精度损失,整型与浮点型计算,整型会被转化成浮点型

4.36

i*=(int)d;

4.37

(a)pv=static_cast<void*>(ps);

(b)i=static_cast<int*>(pc);

(c)pv=static_cast<void*>(&d);

(d)pc=static_cast<char*>(pv);

注意强转的数据类型要用<>扩起来,变量要用()括起来。

4.38

把j/i的结果强转成double赋值给slope

int main()
{

    ,j=;
    double slope=static_cast<double>(j/i);
    cout<<slope<<endl;
    ;
}

比如上面的结果,输出1

其他:

sizeof运算符不会对括号内的表达式求值

int main()
{

    ;
    sizeof(++a);
    sizeof(a++);
    cout<<a<<endl;
    ;
}

输出0!

《C++primer》v5 第4章 表达式 读书笔记 习题答案的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. 《C++primer》v5 第2章 变量和基本类型 读书笔记 习题答案

    2.1 int,long long ,short 可表示范围和占用内存空间不同.具体与计算机有关. 无符号类型只能表示0和正数,带符号类型可以表示负数,0,正数. float是单精度,一般占用4个字节 ...

  8. C++primer(第五版)读书笔记&习题解答---CHAPTER 3

    C++标准库类型包括:string,vector和迭代器,其中string是可变长的字符序列,vector存放的是某种给定类型对象的可变长序列,迭代器是string和vector的配套类型,常被用于访 ...

  9. C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 3

    Chapter 3.1 1. using声明具有如下的形式: using namespace::name; Chapter 3.2 1. C++标准一方面对库类型所提供的操作做了规定,另一方面也对库的 ...

随机推荐

  1. js json 特定条件删除 增加 遍历

    <script type="text/javascript">        //直接声明json数据结构         var myJSONObject = [   ...

  2. SQL SERVER与SSIS 数据类型对应关系

  3. android native crash 分析

    工具: addr2line arm-linux-androideabi-addr2line -aCfe libart.so 0x63006d 当libart.so包含符号表的情况下,可以查询到他的地址 ...

  4. Student elective system (VF)

    博客插N+文件有些麻烦,索性PDF上传到百度文库 点击获取<数据库系统原理与应用>也有相应的word版本 word版加密密码:(博客链接加密后) 六.附录 数据库设计的基本步骤,按照规范设 ...

  5. C#中 Request, Request.params , Request.querystring , Request.Form 区别 与联系用法

    C#中 Request, Request.params , Request.querystring , Request.Form 区别 与联系用法? Request.params , Request ...

  6. python的字符串内建函数

    http://www.ziqiangxuetang.com/python/python-strings.html

  7. jmeter ForEach Controller学习

    ForEach Controller: foreach一般和用户定义变量一起使用,在用户定义变量中定义3个变量 foreach中输出变量名称(vname),这种方式可以生成一个vname的变量,点击运 ...

  8. (转抄:人人都是产品经理——iamsujie)如何提高产品规划PPT的能力

    做产品几年之后,不可避免的要碰到写规划这件事儿,虽说不少人,不乏大牛,对规划持“无用论”的观点, 但大多数人其实还是更相信这个段子: 在一个公司里,看一个人的地位,主要看他平时写的文档类型——写wor ...

  9. org.apache.catalina.webresources.Cache.getResource Unable to add the resource

    org.apache.catalina.webresources.Cache.getResource Unable to add the resource at xxx to the cache be ...

  10. yii2 框架的 save() 方法 执行模式条件。

     save() 方法会调用 insert() 和 update() 中的一个, 用哪个取决于当前 AR 对象是不是新对象(在函数内部,他会检查 yii\db\ActiveRecord::isNewRe ...