10.变量的存储类型-static变量
10.1 知识点
static变量
静态变量的用法如下:
static 变量类型 变量名;
作用
- 使用
static
修饰的变量会在程序的整个生命周期内存储,即使在函数内部声明,它也会遵循这一规则。 - 它可以用来声明静态局部变量、静态全局变量或静态类成员(后续学习)等。
- 静态变量声明一次,永久使用。
生命周期
- 静态局部变量的生命周期是整个程序运行期,即使函数返回,它也不会被销毁。
- 静态全局变量的生命周期也是整个程序运行期。
优点
- 静态变量只初始化一次,且一直保留值,适合全局共享信息或缓存的场景。
缺点
- 静态变量会一直占用内存空间,直到程序结束,因此会增加内存消耗。
注意
- 除非有需求,否则不要过多使用静态变量。
举例说明
静态局部变量
void test()
{
// 静态局部变量,只有在第一次调用时才会初始化,之后会一直存在
// 不会重复分配内存空间(不会重复声明),它伴随整个程序的生命周期
static int num = 1;
cout << "静态局部变量:" << num << endl;
++num;
++testStatic;
cout << "静态全局变量:" << testStatic << endl;
}
test();
// 输出:静态局部变量:1
// 输出:静态全局变量 : 2
test();
// 输出:静态局部变量 : 2
// 输出:静态全局变量 : 3
静态全局变量
// 全局的静态变量,伴随整个程序的生命周期
static int testStatic = 1;
静态全局变量和全局变量的区别
静态全局变量和全局变量的主要区别在于作用域的不同。
全局变量
- 可以在多个文件中访问,适合需要共享数据的情况。
静态全局变量
- 只能在定义它的文件中访问,适合只在单个源文件内部使用的数据。
// 静态全局变量,伴随整个程序的生命周期
static int testStatic = 1;
// 全局变量,和静态全局变量的使用没有区别
// 唯一的区别是,全局变量可以在其他文件中使用,而静态全局变量只能在当前文件(cpp)中使用
int testI = 1;
testStatic++;
cout << "静态全局变量:" << testStatic << endl; // 输出:静态全局变量:4
testI++;
cout << "全局变量:" << testI << endl; // 输出:全局变量:2
10.2 知识点代码
Lesson10_变量的存储类型_static变量.cpp
#include <iostream>
using namespace std;
//全局的静态变量 它伴随整个程序的生命周期
static int testStatic = 1;
//全局变量 其实和 静态全局变量的使用没什么区别
//唯一的区别就是 全局变量可以在别的文件中使用 而 静态全局变量只能在当前文件中(cpp)中使用
int testI = 1;
void test();
int main()
{
std::cout << "变量的存储类型_static变量\n";
#pragma region 知识点一 static变量
//静态变量
//用法:
// static 变量类型 变量名;
//作用:
// static修饰的变量会在程序的整个生命周期内存储
// 就算在函数内部声明,也遵循这一规则
// 它可以用来声明静态局部变量、静态全局变量 或 静态类成员(以后学习)等
// 声明一次,永久使用
//生命周期:
// 静态局部变量的生命周期是整个程序运行期,即使函数返回,它也不会被销毁。
// 静态全局变量的生命周期也是整个程序运行期
//优点:
// 静态变量只初始化一次,且一直保留值,适合全局共享信息或缓存的场景
//缺点:
// 静态变量会一直占用内存空间,直到程序结束,因此会增加内存消耗
//注意:
// 除非有需求,否则不要过多的使用静态变量
//举例说明:
//1.静态局部变量
test();
//静态局部变量:1
//静态全局变量 : 2
test();
//静态局部变量 : 2
//静态全局变量 : 3
//2.静态全局变量
#pragma endregion
#pragma region 知识点二 静态全局变量和全局变量的区别
//他们的主要区别就是作用域不同
//全局变量:
//可以在多个文件中访问,适合需要共享数据的情况
//静态全局变量:
//只能在定义它的文件中访问,适合只在单个源文件内部使用的数据
testStatic++;
cout << "静态全局变量:" << testStatic << endl;//静态全局变量:4
testI++;
cout << "全局变量:" << testI << endl;//全局变量 : 2
#pragma endregion
}
void test()
{
//静态局部变量 只有在第一次调用时 才会去初始化 之后就一直存在了
//不会重复的去分配内存空间(不会重复声明)它伴随整个程序的生命周期
static int num = 1;
cout << "静态局部变量:" << num << endl;
++num;
++testStatic;
cout << "静态全局变量:" << testStatic << endl;
}
10.3 练习题
静态变量的关键字及作用是什么?
static
static
修饰的变量会在程序的整个生命周期内存储,不管是局部还是全局变量都可以。
相当于让变量和程序“同生共死”!!!
静态全局变量和全局变量的区别是什么?
唯一区别就是作用域不同!
- 全局变量可以在多个文件中使用,可以用来共享数据。
- 静态全局变量只能在声明它的文件中使用。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com