for循环内外变量的多个声明相同

Multiple declarations same of variables inside and outside for loop

#include <stdio.h>
int main()
{
    int i;
    for ( i=0; i<5; i++ )
    {
        int i = 10;
        printf ( "%d", i );
        i++;
    }
return 0;
}

在此变量中,ifor 循环外声明,并在 for 循环内再次声明和初始化。 C如何允许多重声明?

循环外的i和循环内的i是两个不同的变量.

  • 外部 i 将在 main 的整个持续时间内存活。

  • 内部i只会在一个循环迭代的持续时间内存在。

内层shadows外层在此范围内:

{
    int i = 10;
    printf ( "%d", i );
    i++;
}

由于阴影规则,在上述范围内无法引用外部。


注意不能在同一个范围内声明两个同名的变量:

{
    int i = 0;
    int i = 1; // compile-time error
}

一个作用域中的变量可以屏蔽更高作用域中的变量。

在此示例中,循环内部定义的 i 掩盖了外部定义的 i。在循环体内,printf 打印内部 i 的值,即 10。然后 i++ 再次对内部 i 进行操作,将其设置为 11。

当循环触底并返回时,内部 i 超出范围。 for 的第二个和第三个子句然后作用于外部 i。再次进入循环体时,定义了一个新的内层i实例,并初始化为10.

您应该查看下一页以了解 C 语言中变量可以具有的不同类型作用域的定义。

http://aelinik.free.fr/c/ch14.htm

您的第一个 int i 在整个块的范围内,而您的第二个 int i 仅在该嵌套循环内具有范围。一旦在嵌套循环之外,i 的原始块作用域版本再次适用。