在C++中,变量的范围(scope)定义了变量可以被访问的代码区域。变量的范围主要分为局部变量和全局变量两种。
局部变量(Local Variables)
局部变量是在函数或代码块(由大括号{}
包围的区域)内部声明的变量。特点:它们只在声明它们的函数或代码块内部可见,一旦退出该函数或代码块,这些变量就不再存在。
示例:
#include<iostream>
using namespace std;
void func() {
int num = 1; // 局部变量
cout << num; // 可以访问
}
int main() {
// cout << num; // 错误:num 在这个作用域中未定义
func();
return 0;
}
在这个例子中,num
是在 func()
函数内部声明的局部变量,它只能在 func()
函数内部被访问。
全局变量(Global Variables)
全局变量是在所有函数之外声明的变量。它们在整个程序的生命周期内都是可见的,并且可以在程序的任何地方被访问。
示例:
#include<iostream>
using namespace std;
int num = 5; // 全局变量
void display() {
cout << num << endl; // 可以访问
}
int main() {
display(); // 输出 5
num = 10;
display(); // 输出 10
return 0;
}
在这个例子中,num
是一个全局变量,它可以在 display()
函数和 main()
函数中被访问和修改。
同名变量的处理
如果一个函数内部有一个与全局变量同名的局部变量,那么在该函数内部访问该变量名时,将优先访问局部变量。
示例:
#include<iostream>
using namespace std;
int num = 5; // 全局变量
int main() {
int num = 10; // 局部变量
cout << num << endl; // 输出 10
return 0;
}
在这个例子中,尽管 nam
被声明为全局变量,但在 main()
函数内部声明了一个同名的局部变量,因此在 main()
函数内部访问 num
时,将访问局部变量 num
。
使用作用域解析运算符访问全局变量
如果需要在存在同名局部变量的情况下访问全局变量,可以使用作用域解析运算符 ::
。
示例:
#include<iostream>
using namespace std;
int a = 0; // 全局变量
int main() {
int a = 10; // 局部变量
cout << ::a << endl; // 使用作用域解析运算符访问全局变量
cout << a << endl; // 访问局部变量
return 0;
}
在这个例子中,::a
用来明确指出要访问的是全局变量 a
。
总结来说,局部变量和全局变量的主要区别在于它们的可见性和生命周期。局部变量只在声明它们的函数或代码块内部可见,而全局变量在整个程序中都是可见的。当存在同名的局部和全局变量时,局部变量会覆盖全局变量的作用域。