《程序员面试宝典》第二版的 错误修正

第一处 P38

下面程序的输出结果是多少

 

void main()  
 {  
    unsigned int a = 0xFFFFFFF7;  
    unsigned char i = (unsigned char)a;  
    char* b = (char*)&a;  
   
    printf("%08x, %08x\n", i, *b);  
 }  

解答: 输出的结果是000000f7, fffffff7。变量i的输出是没有疑问的,unsigned int到unsigned char直接截断,取低字节。

对于变量b,在第5行中,书中解释是这一行等价于

  1. unsigned int* p = &a; // p中的内容是的地址,即p指向a 
  2. char* b = (char*)p; // 此处的强制转换只是使b也指向a而已 
  3. // 这里是char类型的指针转换,而不是char类型的转换,影响的只是指针的

看似好像正确,其实不然,不能因为结果对了 就去这么解释。

可以试验一下 把第一行 unsigned int a = 0xFFFFFFF7; 改为unsigned int a = 0x1FFFFFF7; 输出等等*b还是fffffff7。

到底什么原因?可见指针转换的时候并不是这么转换的。

(char*)&a 将a的地址转换成一个char型指针,和(int*)&a 转换成一个int是不同的,它只会指向&a的低8位内存,其余的发生了截断。

所以 现在b指向的是0xf7, 这是一个负数,使用%08x 输出 就是ffffffff7.

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
本书针对当前各大it企业面试笔试中常见的问题以及注意事项,进行了深层次的分析。本书除了对传统的计算机相关知识(c/c++、数据结构与算法、操作系统、计算机网络与通信、软件工程、数据库、智力题、英语面试等)进行介绍外,还根据当前计算机技术的发展潮流,对面试笔试中常见的海量数据处理进行了详细的分析。同时,为了更具说服力,本书特邀多位it名企面试官现身说法,对面试过程中求职者存在的问题进行了深度剖析,同时本书引入了一批来自于名牌高校、就职于明星企业的职场达人的真实求职案例,通过他们的求职经验与教训,抛砖引玉,将整个求职过程生动形象地展示在读者面前,进而对求职者起到一定的指引作用。本书也对各种类型的it企业的招聘环节进行了庖丁解牛式的分析,帮助求职者能够更加有针对性地 进行求职准备。 本书是一本计算机相关专业毕业生面试笔试的求职用书,同时也适合期望在计算机软硬件行业大显身手的计算机爱好者阅读。 程序员面试笔试宝典 目录 前言 上篇 面试笔试经验技巧篇 第1章 面试官箴言 2 第2章 面试心得交流 9 第3章 企业面试笔试攻略 20 第4章 面试笔试技巧 42 第5章 英文面试攻略 82 第6章 智力题攻略 102 下篇 面试笔试技术攻克篇 第7章 程序设计基础 122 第8章 数据库 240 第9章 网络与通信 254 第10章 操作系统 270 第11章 软件工程 278 第12章 发散思维 289 第13章 数据结构与算法 295 第14章 海量数据处理 390
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值