程序员面试宝典 第三版 错误

        这篇总结写到一半时,谷歌一下,发现早有大神总结的宝典中的错误,从他的总结中可以看出来这位大神无论是心思还是技术都比我细腻。 但我找到的一些错误他也没发现,两个人的答案并起来会好一点。强烈推荐:《程序员面试宝典3》大量错误(50+)纠正表 :http://blog.csdn.net/hilyoo/article/details/4466680

        最近在找实习,需要补充内力,于是啃起了《程序员面试宝典》第三版。很多人对这本书嗤之以鼻,认为该书只是把网上的题目拼凑起来,很多东西都可以从网上搜到,甚至可以找到更好的解释和更详细的分析。然而,我这本书啃了大半,感觉对于我这样的连笔试都不一定能过的菜狗,还是非常有必要值得认真一读的。遗憾地是,书中的确有些错误,有的是印刷排版错误,有的是技术错误,有的直接贴代码而完全没有解析,例如(P228页的1的个数,完全是来自CSDN的oo大神的源代码,链接如右:http://bbs.csdn.net/topics/70522458)。对这些错误,我有一些自己的答案,但半斤八两的我学识浅薄,不能保证答案正确,只是发布出来希望能和大家探讨一下。下面中的错误但凡来自他人的内容,都会有原帖链接。如果还有其他错误我没有发现,希望各位大神点拨提示一下。

       1. P30页,面试例题2,解析没错,答案:10,10,1,3,1,7,应改为10,10,1,3,1,7,1。估计为印刷排版错误。

       2. P32页,面试例题2,题目有错,题目中 sint *ptr=arr,应改为 int *ptr=arr。估计为印刷排版错误。

       3. P34页,面试例题2,答案没错,但分析不妥。需要用到“小端存储”的概念和printf的格式控制的知识。详见:http://caswycherley.blog.163.com/blog/static/20951605520127159326444/

       4. P40页,面试例题2,解析中的例子有错,最底下一行:00000101^00000101得到00001001,应改为00001100^00000101得到00001001。意思是12^5=9。估计为印刷排版错误。

       5. P52页,面试例题3,解析有错,sizeof(A3)是12,应改为,sizeof(A4)是12。sizeof(A3)是24,应改为,sizeof(A5)是24。估计为印刷排版错误。

       6. P56页,面试例题7,解析中的第(5)点有错,文中写到sizeof(string)=4,笔者在自己64为系统上的VS2010上测试为sizeof(string)=32,另有网友分析帖:http://www.cnblogs.com/wanghetao/archive/2012/04/04/2431760.html

       7. P83页,面试例题1,解析题目都有错,题目中,即输出125,146,145,146,应改为,即输出125,126,145,146。解析中的错误也如此。估计为印刷排版错误。

       8. P96页,面试例题3,答案修改方法2有错,array.erase(itor2);,应改为itor=array.erase(itor2);。原因来自C++primer(中文第四版)P282页的“小心地雷”所述:“erase,pop_front和pop_back函数使指向被删除元素的所有迭代器失效“。所以执行了array.erase(itor2)语句后,itor也会失效,因此需要把对itor重新赋值,即把erase操作后的返回值赋给itor。

       9. P160页,面试例题3,答案有错,答案说道:“第三个意味着a是一个指向常整数型的指针(也就是说,整型数是不可修改的,但指针可以修改)”。这样的说法不妥当,第三个即const int * a,的确是一个指向const对象的指针,即指针本身不是const的,可以被修改,但它指向的对象,即这个整形数,是可以被修改,只不过是不允许通过这个指针去修改这个对象的值。可能说得有点绕,详见C++primer(中文第四版)P110页。这里举个最简单的例子,a是一个指向const对象的指针,但它指向一个非const的int型对象b。这个b的整型值是可以被修改的,只不过不能通过a这个指针去修改它,否则会报错。

        const int* a;
        int b=30;
        a=&b; 
        cout<<*a<<endl; //*a=30
        b=40;
        cout<<*a<<endl; //*a=40
        *a=50;//error C3892: 'a' : you cannot assign to a variable that is const
       10. P225页,面试例题2,答案解析都有错,解析中int n=10,a[n];是可以的。其实这是不可以的,在C++中声明一个数组,a[n],这里的n应为一个常量表达式,而原题目中的n是一个整型变量,如果是const int n=10,a[n];则不会报错。所以答案不是B,C,应改为B。

       11. P225页,面试例题1,答案中的程序可以进一步优化,for(int j=i+1;j<len;++j) 优化为j<=(len+i)/2,详见:http://blog.csdn.net/hehao5/article/details/8679347

       12. P226页,

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值