声明的区别?

时间:2015-07-20 09:42:47

标签: c for-loop

在使用in循环之前声明变量和在循环中定义变量时有什么区别。

我在谈论这种情况

int i;

for(i=0; i<100; i++);

  for(int i=0; i<100; i++);

6 个答案:

答案 0 :(得分:3)

在前一种情况下,您可以在for循环之外访问i。如果循环中有条件中断,这可能是有利的,例如:

int i = 0;

for (i = 0; i < 100; i++) {
    if (someUnexpectedConditionHappens()) {
        break;
    }

    // do something
}

printf("The loop has been executed %d times", i);

答案 1 :(得分:2)

在第一种情况下,i可以在for循环之外访问。

在第二种情况下,i的范围仅限于for循环体。

可以说第二种情况可以提供更好的程序稳定性,因为在i循环之外使用for通常是无意的。

答案 2 :(得分:2)

它是&#34;范围&#34;。在第二种情况下,您只能在for循环中使用该变量。在第一种情况下 - 在整个包含块中。

答案 3 :(得分:2)

在第一种情况下,可以在当前块内的循环外部访问i。在C89中,您无法在循环中声明变量,因此您必须坚持使用此方法。

在第二种情况下,无法在循环外访问i。在循环中声明变量是C99功能。

答案 4 :(得分:2)

在循环之前执行此操作时,变量也可在循环外部使用。 而当你在里面做它时,它是一个只能在循环中使用的局部变量。

此外,您可以在使用C99标准时在循环内声明变量。但它不适用于例如C90。所以要小心。

答案 5 :(得分:2)

在第一种情况下,假设在循环之后也将使用变量i,例如

int i;

for(i=0; i<100; i++);

printf( "i = %d\n", i );

然而,编写以下方式会好得多

int i = 0;

for( ; i<100; i++);

printf( "i = %d\n", i );

在这种情况下,我们将获得一个有效的可读代码,而不需要打扰循环中的内容,例如

int i = 0;

/* some loop used i */

printf( "i = %d\n", i );

即使变量不会在循环中或在某些其他代码中而不是循环中更改(赋值)(通常每个代码都有改变的倾向),但我们将获得有效的结果。

在第二种情况下,假设变量i将仅在循环中使用

for(int i=0; i<100; i++);

我们不需要它在循环之外的价值。所以在这种情况下,变量的寿命受到循环体的限制。在循环之外它将是隐形的而不是活着的。