闲言少叙,今天在网上看到一个小程序是关于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

刚开始我怎么也想不通,后来我启动调试,一步一步查看变量内容终于明白了。

如果您也有点迷惑,就继续往下看。

  1. *p=a

  2. 执行case('a') a=1

  3. 执行case('b') b=1

  4. 执行default c=1

  5. *p=h

  6. 执行case('h') b=2

  7. 执行default c=2

  8. *p=a

  9. 执行case('a') a=2

  10. 执行case('h') b=3

  11. 执行default c=3

  12. *p=!

  13. 执行default c=4

  14. 执行printf

  15. over

所以最终结果就如前面所述了。

此时我就想起了在刚接触switch的时候,每个分支总是有一个break语句的作用:

原来switch语句的每一个分支都是从第一个匹配成功的case开始顺序往下执行,直到遇到break语句跳出循环