#include <stdio.h>
int main()
{
int i;
for ( i=0; i<5; i++ )
{
int i = 10;
printf ( "%d", i );
i++;
}
return 0;
}
在此变量中i
在for
循环之外声明,并在for
循环内再次声明和初始化。 C如何允许多个声明?
答案 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");
的原始块范围版本将再次适用。