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

时间:2017-12-14 21:47:44

标签: c variable-declaration

#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如何允许多个声明?

3 个答案:

答案 0 :(得分:5)

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

  • i将在main的整个期间内有效。

  • 内部i仅在一次循环迭代期间存在。

此范围内的外部shadows

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

由于阴影规则,在上述范围内不可能引用外部规则。

请注意,无法在同一范围内声明两个名称的变量

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

答案 1 :(得分:3)

一个范围内的变量可以在更高的范围内掩盖变量。

在此示例中,循环内部定义的i将屏蔽外部定义的i。在循环体中,printf打印内部i的值,即10. i++然后在内部i上再次操作,将其设置为11。 / p>

当循环触及底部并向上返回时,内部i超出范围。然后for的第二和第三个条款在外i上运行。再次输入循环体时,将定义内部i的新实例并将其初始化为10.

答案 2 :(得分:1)

您应该查看以下页面,了解变量可以在C语言中使用的不同类型范围的定义。

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

您的第一个int i位于整个块的范围内,而您的第二个i仅具有该嵌套循环中的范围。一旦在嵌套循环之外,DataSource ds = (DataSource) (new InitialContext()).lookup("java:/mydb"); 的原始块范围版本将再次适用。