C操作顺序

gri*_*ime 1 c printf scope operator-precedence

那么对于两个独立的代码片段,为什么递增器/递减器的行为不同?

片段A:

i=7; j=8; k=9; 
printf("%d\n", i - 7 && j++ > k);
printf("%d %d %d", i, j, k);
Run Code Online (Sandbox Code Playgroud)

将产生以下输出:

0
7 8 9
Run Code Online (Sandbox Code Playgroud)

片段B:

while (i > 0)
printf("T minus %d and counting\n",i--);
Run Code Online (Sandbox Code Playgroud)

产生这个:

T minus 5 and counting
T minus 4 and counting
T minus 3 and counting
T minus 2 and counting
T minus 1 and counting
Run Code Online (Sandbox Code Playgroud)

现在,我知道函数的参数是通过值传递的,并且它必须与j布尔表达式中使用的事实有关.但这两种情况似乎与我相矛盾.这里发生了什么?

Cha*_*tin 7

好吧,你要需要看非常的运营商优先级如何排列紧密准确它们如何工作.由于这是作业,我不打算给出确切的答案,但你应该做两件事.

  1. 使用优先级表用完整括号重写表达式
  2. 查找确切的行为&&.特别是,何时j++ > k执行子表达式?