|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 小蒙 于 2017-10-15 14:16 编辑
个人理解:switch(i++)是一个完整表达式,完整表达式的结束是一个序列点,所以程序运行到第一个case的时候,i已经变成完成自增,那么,在i初始值是0的情况下,第一个case 0程序是进不去的,这时候i已经变成了1,和case 0不符。
通过调试,switch()确实是序列点,switch运行完后i的值确实递增了,但是同时,程序竟然能进入case 0,但是这时候i的值确实是1,这我就不懂了。
- #include <stdio.h>
- #include <stdbool.h>
- #include <string.h>
- #include <iso646.h>
- #include <ctype.h>
- int main(void) {
- int i = 0;
- while (i < 3){
- switch(i++){
- case 0:
- printf("case 0\n");
- break;
- case 1:
- printf("case 1\n");
- break;
- case 2:
- printf("case 2\n");
- break;
- default:
- printf("default\n");
- break;
- }
- }
- return 0;
- }
- //结果如下
- case 0
- case 1
- case 2
复制代码
是的,你要是在调试中单独看i的值的确是会增加的,但是在程序里你只有在switch中才出现了i,内部是没有的,但是内部判断的是 i 的值,只有在下一次出现 i 的时候才会改变值。我给你个程序,你可以试试看。
- #include <stdio.h>
- int main(void)
- {
- int i = 0, j;
- j = i++; // i++优先级肯定大于‘=’的吧,肯定是先运行i++再赋值吧
- printf("i = %d\nj = %d\n", i, j);
- return 0;
- }
复制代码
|
|