C++局部变量和全局变量详解
根据作用范围划分,C++ 中的变量可以细分为局部变量和全局变量两种。在本文中,将详细介绍局部变量和全局变量的定义、特性和使用场景,并通过实例代码来详细解释它们。
局部变量存储在栈内存中,当定义它的函数或者代码块执行完后,局部变量就会被销毁,占用的栈内存也会被回收。
举个简单的例子:
注意,函数形参的作用域也仅限于函数体内,所以形参也可以当做局部变量使用。
全局变量在整个程序的生命周期内都是可访问的。全局变量是在程序开始时就创建好了,程序运行结束时才销毁。
全局变量存储在全局数据区,它的作用域是整个程序,即在任何一个函数中都可以访问。全局变量一旦被修改,在其它函数中访问到的值也会随之而变。
举个简单的例子:
局部变量和全局变量各有优缺点,应根据实际需求和场景合理使用。
局部变量
局部变量指的是在函数或者某个代码块内部定义的变量,这些变量只能在定义它们的函数或代码块中使用。局部变量存储在栈内存中,当定义它的函数或者代码块执行完后,局部变量就会被销毁,占用的栈内存也会被回收。
举个简单的例子:
#include <iostream> void myFunction() { int a = 10; // 局部变量 std::cout << "Local variable value: " << a << std::endl; } int main() { myFunction(); // std::cout << a; // 错误!因为局部变量 a 不在这个作用范围内 { int b = 10; //局部变量,位于 {} 代码块中 std::cout << "Lacal Variable value:" << b << std::endl; } //std::cout << b; // 错误!因为局部变量 b 不在这个作用范围内 return 0; }在上述程序中,myFunction() 函数中定义了一个变量 a,其作用域仅仅限于 myFunction() 的函数体内。此外在 main() 函数中,变量 b 定义在
{ }
包裹的代码块内,其作用域仅限于{ }
代码块内。注意,函数形参的作用域也仅限于函数体内,所以形参也可以当做局部变量使用。
全局变量
全局变量指的是在所有函数之外定义的变量。全局变量在整个程序的生命周期内都是可访问的。全局变量是在程序开始时就创建好了,程序运行结束时才销毁。
全局变量存储在全局数据区,它的作用域是整个程序,即在任何一个函数中都可以访问。全局变量一旦被修改,在其它函数中访问到的值也会随之而变。
举个简单的例子:
#include <iostream> int a = 20; // 全局变量 void myFunction() { std::cout << "Global variable value: " << a << std::endl; } int main() { myFunction(); // 输出:Global variable value: 20 std::cout << "Global variable value in main: " << a << std::endl; // 输出:Global variable value in main: 20 return 0; }运行结果为:
Global variable value: 20
Global variable value in main: 20
局部变量VS全局变量
- 生命周期:局部变量的生命周期较短,仅存在于函数或代码块执行期间。全局变量的生命周期从程序开始到程序结束。
- 作用范围:局部变量只在定义它的函数或代码块中有效,而全局变量在整个程序中都有效。
- 内存使用:因为局部变量的生命周期较短,所以通常更加节省内存。
- 可维护性:过多地使用全局变量会降低程序的可维护性和可读性。
局部变量和全局变量各有优缺点,应根据实际需求和场景合理使用。