我正在阅读Stanley B. Lippman撰写的C ++ Primer,在流程控制部分,它显示了像这样的for循环的一个例子:
#include <iostream>
int main(void){
int sum=0;
for (int val=1; val <= 10; val++)
sum +=val;
std::cout << sum << std::endl;
return 0;
}
如果我在for循环之外尝试std::cout << val;
,IDE会给我一个错误。但我想了解它为什么会发生以及它与这段代码的不同之处:
#include <iostream>
int main(void){
int sum=0;
int val;
for ( val=1; val <= 10; val++)
sum +=val;
std::cout << sum << std::endl;
std::cout << val;
return 0;
}
我可以在没有任何问题的情况下实际打印val
值。
考虑到for-loop我们在main中使用的函数,是否与局部变量有关?
答案 0 :(得分:8)
每个变量都有范围,这是(松散地说)它的生命周期。
在for
循环的头部声明的变量的范围仅限于for
循环。当控制传出循环时,变量超出范围。当控件传递出函数时,函数中声明的变量完全相同。
答案 1 :(得分:3)
考虑到for-loop我们在main中使用的函数,是否与局部变量有关?
与功能无关;还有很多其他方法可以获得范围,包括一个块:
int main()
{
{
int x = 0;
}
std::cout << x; // error
}
for循环是另一个例子。
答案 2 :(得分:1)
故意。它被称为scope,每当你引入一个块{ /*stuff here */ }
(以及其他一些地方)时,块内的变量都是块的本地变量,并取代(隐藏)在块外定义的同名变量。它有助于确保块本地代码不会遇到其他变量。在编辑旧代码库时非常有用,并且您不希望意外地使用更宽范围的变量。
答案 3 :(得分:0)
这背后的概念称为变量范围。每当创建变量时,都会为其分配一个内存位置。所以为了优化内存使用范围,定义了变量。
在第一种情况下,变量仅限于for循环。变量在循环开始时在内部创建,在循环内部使用,并在执行循环时销毁。
在第二种情况下,变量是在循环外部创建的,因此它一直持续到程序执行,因此即使在循环之后你也能够访问它。
在for循环中声明的变量是局部变量的一个例子,而在外面声明的变量是全局变量的一个例子。 不仅有循环,局部变量也将用于if..else块,函数及其用法仅限于范围内。
希望这能回答你的问题。