20行经典C语言代码,有很多人不明白?你来试试?

 

C语言switch-case的一些特性

Duff注意到C语言中switch-case语句的一些特性:

  • • case语句后面的break语句不是必须的。

  • • 在switch语句内,case标号可以出现在任意的子语句之前,甚至运行出现在if、for、while等语句内。

于是,Duff便利用switch-case的特性,用来处理第一个while循环之后仍然剩余的count % 8个字节的数据。

 

解释下这段代码:

我们假设count = 20,那么:

n = (count + 7) / 8 = 27 / 8 = 3
count % 8 = 4

所以:

  1. 1. switch语句会落入case 4的标签内,然后依次执行了case 4、3、2、1四条语句。自此之后,其实就跟switch-case语句再也没有关系了。

  2. 2. while语句判断--n > 0,条件成立,于是跳转到case 0进入循环体执行,于是依次执行case 0、7、6、5、4、3、2、1一共8条语句。此时n = 2.

  3. 3. 再次进入while语句处判断--n >0,条件成立,再次跳转到case 0处进入循环体执行。此时n = 1

  4. 4. 此时,while语句处判断--n >0,条件失败,退出循环,函数结束。

好了,到这里,大家应该理解Duff's Device了吧?还是不清楚的话,可以尝试单步跟踪一下,就会很清晰了。

揭晓答案

理解了Duff's Device之后,文章开头的那个题目就很好理解了,现在揭晓答案:

 

编译运行:代码不提供,谢谢

 

所以,答案是:20

你可能感兴趣的:(C语言实战演练教学,c语言)