为了账号安全,请及时绑定邮箱和手机立即绑定

面试题-代码解读

面试题-代码解读

HUWWW 2018-08-01 18:09:15
今天面试面试官让读下面这段代码,然后说出代码作用,看了10分钟后被面试官打断,真没看出这代码到底是做什么的,取得面试官同意后拍照,自己在电脑上跑了跑,没看出这到底是要干什么.void send(int* to, int* from, int count){  int n = (count+7)/8;  switch(count%8) {    case 0: do{ *to++ = *from++;    case 7:     *to++ = *from++;    case 6:     *to++ = *from++;    case 5:     *to++ = *from++;    case 4:     *to++ = *from++;    case 3:     *to++ = *from++;    case 2:     *to++ = *from++;    case 1:     *to++ = *from++;            } while(--n>0);  }}其实真正的结构是这样的: void send(int* to, int* from, int count)    {      int n = (count+7)/8;      switch(count%8) {        case 0:         do        {         *to++ = *from++;        case 7:     *to++ = *from++;        case 6:     *to++ = *from++;        case 5:     *to++ = *from++;        case 4:     *to++ = *from++;        case 3:     *to++ = *from++;        case 2:     *to++ = *from++;        case 1:     *to++ = *from++;        } while(--n>0);      }    }
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

貌似是在拷贝数组, (count + 7) / 8 是在计算循环次数,主要是考虑有余数的情况,而且避开 0,因为

(0 + 7) / 8 == 0;
(1 + 7) / 8 == 1;
...
(8 + 7) / 8 == 1;
(9 + 7) / 8 == 2;

所以可以认为是把从 0 起始的数组变成了从 1 起始的数组,而且按 8 个一组分

case 可以当 label 看待,switch 只有第一次循环有效,也就是处理余数部分,比如 count = 12 的时候直接从 4 开始但一轮循环完成下一个循环的时候肯定是从 7 开始的。

看程序大概是这么回事


查看完整回答
反对 回复 2018-08-05
  • 2 回答
  • 0 关注
  • 996 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信