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

面试题-代码解读

面试题-代码解读

慕容森 2019-04-19 16:29:57
今天面试面试官让读下面这段代码,然后说出代码作用,看了10分钟后被面试官打断,真没看出这代码到底是做什么的,取得面试官同意后拍照,自己在电脑上跑了跑,没看出这到底是要干什么.voidsend(int*to,int*from,intcount){intn=(count+7)/8;switch(count%8){case0:do{*to++=*from++;case7:*to++=*from++;case6:*to++=*from++;case5:*to++=*from++;case4:*to++=*from++;case3:*to++=*from++;case2:*to++=*from++;case1:*to++=*from++;}while(--n>0);}}其实真正的结构是这样的:voidsend(int*to,int*from,intcount){intn=(count+7)/8;switch(count%8){case0:do{*to++=*from++;case7:*to++=*from++;case6:*to++=*from++;case5:*to++=*from++;case4:*to++=*from++;case3:*to++=*from++;case2:*to++=*from++;case1:*to++=*from++;}while(--n>0);}}
查看完整描述

2 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

貌似是在拷贝数组,(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开始的。
看程序大概是这么回事
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

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