码迷,mamicode.com
首页 > 移动开发 > 详细

深入理解计算机系统第二版习题解答CSAPP 2.11

时间:2014-11-18 00:18:15      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   使用   sp   for   div   问题   

在2.10中的inplace_swap函数的基础上,你决定写一段代码,实现将一个数组中的元素两端依次对调,你写出下面这个函数:

 1 void reverse_array(int a[], int cnt)
 2 {
 3     int first, last;
 4     for(first = 0, last = cnt - 1;
 5          first <= last;
 6          first ++, last --)
 7     {
 8         inplace_swap(&a[first], &a[last]);
 9     }
10 }

当对一个数组包含1、2、3、4时,得到预期的结果4、3、2、1。不过,当一个包含元素为1、2、3、4、5的数组使用这个函数时,你会很惊奇看到结果为5、4、0、2、1。对于偶数个元素的数组正常工作,奇数个元素的数组会把中间元素设置为0。

A.对于一个长度为奇数的数组,长度为cnt = 2k + 1,函数reverse_array最后一次循环中,变量first和last的值分别是什么?

B.为什么这时调用函数inplace_swap会将数组元素设置为0?

C.对reverse_array的代码做哪些简单改动就能消除这个问题?

解答:

A. first和last都为k。

B. 最后一次循环时。假设a[k]为p。

步骤 *x *y
初始 a[k]=p a[k]=p
第一步 0 p^p=0
第二步 0 0
第三步 0 0

C. 将第5行代码改为如下即可。

1 first < last

 

深入理解计算机系统第二版习题解答CSAPP 2.11

标签:style   blog   color   ar   使用   sp   for   div   问题   

原文地址:http://www.cnblogs.com/furzoom/p/CSAPP2_11.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!