在循环中声明变量和在循环之前声明变量有什么区别?

3

看看这个例子:

int i;
for (i=1;i.......

还有这个:

for (int i=1;i........

它们之间有什么区别?

2
这在某种程度上取决于编程语言。 - Quentin
2个回答

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

2

这要取决于语言,但你没有说明是哪种语言 :-)

在C语言(和一些其他语言)中,变量的作用域(实际上是持续时间)是不同的。在第一个例子中,变量在循环后仍然存在,因为它是在循环外声明的。

而在后一个例子中,它在循环结束时消失了,因为它的存在是“在”循环体内部的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接