本帖最后由 番杰 于 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 ;
(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; 
(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就是三目运算式的结果。
(7)执行break语句,退出switch
(8)顺序执行:printf("%d", a);很简单,打印出a的值,
  此时a的值为7,所以就会打印出7.