10.static变量

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

×

喜欢就点赞,疼爱就打赏