C for循环内外相同变量的多个声明 #包括 int main() { int i; 对于(i=0;i

C for循环内外相同变量的多个声明 #包括 int main() { int i; 对于(i=0;i,c,variable-declaration,C,Variable Declaration,而言,循环外部的i和循环内部的i是两个不同的变量 外部i将在main的整个期间有效 内部i仅在一次循环迭代期间有效 此范围内的内部和外部: #include <stdio.h> int main() { int i; for ( i=0; i<5; i++ ) { int i = 10; printf ( "%d", i ); i++; } return 0; } 由于阴影规则,在上述范围内不

而言,循环外部的
i
和循环内部的
i
是两个不同的变量

  • 外部
    i
    将在
    main
    的整个期间有效

  • 内部
    i
    仅在一次循环迭代期间有效

此范围内的内部和外部:

#include <stdio.h>
int main()
{
    int i;
    for ( i=0; i<5; i++ )
    {
        int i = 10;
        printf ( "%d", i );
        i++;
    }
return 0;
}
由于阴影规则,在上述范围内不可能引用外部的阴影


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

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

一个范围内的变量可以屏蔽更高范围内的变量

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


当循环到达底部并返回时,内部
i
超出范围。然后
for
的第二和第三个子句对外部
i
进行操作。当再次输入循环体时,内部
i
的新实例被定义并初始化为10。

您应该检查以下page提供了变量在C语言中可以具有的不同类型作用域的定义


第一个
int i
在整个块的范围内,第二个
int i
仅在该嵌套循环内具有范围。一旦超出嵌套循环,原始块范围版本的
i
将再次适用。

即使您有
的(int i=0;iSee内部范围/外部范围C11§6.2.1 4仅供参考,C标准使用的术语是“隐藏”而不是“阴影”。仅供参考,C标准使用的术语是“隐藏”而不是“遮罩”
{
    int i = 0;
    int i = 1; // compile-time error
}