马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
|