闲言少叙,今天在网上看到一个小程序是关于switch的,突然发现自己以前理解的switch有盲点,希望能给大家也带来点启发。
#include <stdio.h> void main() { char* p="aha!";int a=0,b=0,c=0; while(*p) { switch(*p) { case('a'): a++; case ('h'): b++; default: c++; } p++; } printf("%d,%d,%d",a,b,c); }
运行结果为:
a=2,b=3,c=4
刚开始我怎么也想不通,后来我启动调试,一步一步查看变量内容终于明白了。
如果您也有点迷惑,就继续往下看。
*p=a
执行case('a') a=1
执行case('b') b=1
执行default c=1
*p=h
执行case('h') b=2
执行default c=2
*p=a
执行case('a') a=2
执行case('h') b=3
执行default c=3
*p=!
执行default c=4
执行printf
over
所以最终结果就如前面所述了。
此时我就想起了在刚接触switch的时候,每个分支总是有一个break语句的作用:
原来switch语句的每一个分支都是从第一个匹配成功的case开始顺序往下执行,直到遇到break语句跳出循环。
转载于:https://blog.51cto.com/xuehanlee/1421195