for循环第一个语句应该是声明

use*_*653 0 c

main ()
{
      char i = 0;
      for (i <= 5 && i >= -1; ++i; i > 0)
          printf ("%d", i);
      getch ();
}
Run Code Online (Sandbox Code Playgroud)

我是一名Java学生,最近我开始做C程序.我在C书中看到了这个问题.我对这个程序有以下疑问:

  1. 这个程序汇编得很好.这应该不会导致编译错误吗?for循环的第一部分应该是一个声明,但这里是一个布尔表达式.
  2. 输出是1,2,3,4.....126,127,-128....-2,-1.为什么输出停在-1?这应该是一个无限的系列,永远重复上述系列.

Mar*_*ian 6

For循环由三个表达式组成,因此这个例子编译得很好.第一个是i <= 5 && i >= -1.它什么都不做.第二个是循环停止的条件.在您的情况下++i意味着当i达到值0 时循环停止.第三部分i>0什么都不做.所以你的周期:

  for (i <= 5 && i >= -1; ++i; i > 0)
      printf ("%d", i);
Run Code Online (Sandbox Code Playgroud)

相当于:

  i <= 5 && i >= -1;
  while (++i) {
      printf ("%d", i);
      i>0;
  }
Run Code Online (Sandbox Code Playgroud)

这相当于:

  while (++i) {
      printf ("%d", i);
  }
Run Code Online (Sandbox Code Playgroud)