本帖最后由 番杰 于 2021-10-25 14:22 编辑
从程序中的switch语句开始说:
(1)执行到switch语句,对flag进行判断,flag初始化为1,所以执行case 1:后的语句;
(2)执行a+ = printf(“1234”)这条语句;
首先需要知道printf函数返回值是实际打印的字符数(不包含表示字符串结束的 '\0');
所以这条语句就相当于:
printf("1234"); //1 2 3 4 四个字符,所以返回值为4(int类型)
a = a + 4 ;
执行后:会在屏幕上打印出1234,并且此时的a的数值为1+4 = 5 ;
(3)接着执行printf("\n");这条语句没有什么好说的就是一个换行,使下次打印从下一行开始。
(4)而后会执行case 2中的 a+= printf("%d", printf("1234\n"));
(因为,在switch中程序会顺序执行,而在case 1 的代码后的没有break;所以程序会按顺序继续执行;)
这条语句跟上面那条语句一样,只不过printf(“1234\n”)中多了一个‘\n’,'\n'相当于一个字符,
所以这个printf的返回值为5,所以这条语句就可以拆分为:
printf("1234\n");
printf("%d",5); //这个printf的返回值为1 ,因为只打印了一个数字5;
a = a + 1;
执行后:打印出1234,换行,接着打印出5,此时的a = 5+1 = 6 ;
(5)printf("\n"),换行
(6)顺序执行至default:a+ = (a > b ? 1 : 2)
等号后面的a > b ? 1 : 2是一个三目运算式:作用就是判断a是否大于b,若大于则为1;若小于则为2;
而此时的a = 6;b = 2;
a 妥妥的大于 b,所以该表达式值为1:
所以,该语句想当于:
a = a + 1; //这个1就是三目运算式的结果。
执行后:a = 6 +1 =7;
(7)执行break语句,退出switch
(8)顺序执行:printf("%d", a);很简单,打印出a的值,
此时a的值为7,所以就会打印出7.