面试题-代码解读

今天面试面试官让读下面这段代码,然后说出代码作用,看了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);
}
}
慕容森
浏览 297回答 2
2回答

德玛西亚99

貌似是在拷贝数组,(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开始的。看程序大概是这么回事
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript