2010-04-30 66 views

回答

10

第一个声明循环外的作用域中的变量;循环结束后,变量仍然存在并且可用。第二个声明变量,使它属于循环的范围;在循环之后,变量不再存在,防止该变量被无意地/错误地使用。

在C99,C++,Java和其他类似的语言,你会发现大多是第二个语法,因为它是更安全 - 循环索引所属的环和不被修改/别处共享。但是,您会在较旧的C代码中看到很多前者,因为ANSI C不允许在循环中声明循环变量。

举个例子:

int i; 
// ... lots of stuff 
for (i = 0; i < 5; i++){ 
    printf("%d\n",i); // can access i; prints value of i 
} 
printf("%d\n",i); // can access i; prints 5 

相反:

for (int i = 0; i < 5; i++){ 
    std::cout << i << std::endl; // can access i; prints value of i 
} 
std::cout << i << std::endl; // compiler error... i not in this scope 
+0

答案是非常丰富的。 – Nobody 2010-04-30 10:06:31

2

这将取决于语言,你还没有:-)

在C指定(和该变量的一些其他),范围(有效地在这种情况下的持续时间)是不同的。首先,变量存在于循环之后,因为它在外部声明。

在后者中,它当循环结束,因为它的存在是“内部”循环体消失。

+0

感谢您的回答paxdiablo。 – Nobody 2010-04-30 10:07:06