for循环中的赋值语句

nou*_*fal 0 c c++ arrays printf for-loop

以下代码是我编写的,用于测试我对使用for-loopin的理解,特别是在其中C使用赋值语句for-loop.但在这里我得到了意想不到的输出.为什么不分配0给前10个元素array? 如果我将数组声明为而不是?
为什么它根本不打印?谁能解释一下?arrayarray[10]array[11]

#include <stdio.h>

int main() {
  int i, array[11];  //array[10]
  for (i = 0; ((i < 10) || (array[i] = 0)); ++i);
  for (i = 0; ((i < 10) && (printf("%d\n", array[i]))); ++i);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 6

((i < 10) || (array[i] = 0))
Run Code Online (Sandbox Code Playgroud)

||是懒惰的,只要i < 10表达式会短路,甚至不会评估赋值.

改变循环的显而易见的方法是:

for (i = 0; i < 10; ++i) 
    array[i] = 0;
Run Code Online (Sandbox Code Playgroud)

...它更具可读性,完全符合您的要求.

  • 如果你真的不想使用`for`循环的主体(无论出于何种原因),你可以在`for`:`for的第三部分使用逗号运算符(i = 0; i <10 ; array [i] = 0,++ i);` (2认同)