c++复习自存

static 静态变量用途

一、函数内部 static 局部变量

核心特点

  1. 存储在全局静态存储区,不是栈;程序启动分配内存、程序结束才销毁
  2. 只初始化1次,首次进入函数执行初始化,后续调用跳过初始化
  3. 作用域仍仅限当前函数,外部无法访问

用途

  1. 保存函数跨调用的持久状态(计数器、缓存上次结果)
voidcount(){staticintnum=0;// 仅第一次赋值0num++;printf("%d",num);}// 连续调用输出:1 2 3 4...
  1. 避免重复创建大数组/结构体,减少栈溢出

二、文件域 static 全局变量(函数外)

核心特点

  1. 仍是全局生命周期,但作用域限制在当前.c/.cpp文件
  2. 其他源文件无法通过extern访问,实现文件私有

用途

  1. 封装模块私有数据,防止多文件命名冲突
  2. 实现模块化隔离,仅本文件读写,降低耦合

三、类中 static 成员(C++专属)

1. static 成员变量

  • 不属于某个对象,属于整个类,所有对象共享同一份内存
  • 必须类外初始化
  • 用途:统计类实例总数、全局共享配置(统一参数)
classStudent{public:staticintcnt;// 所有学生共用计数器Student(){cnt++;}};intStudent::cnt=0;

2. static 成员函数

  • 没有this指针,只能访问static成员,不能操作普通成员变量
  • 可直接用类名::函数()调用,无需创建对象
  • 用途:工具类通用方法、操作类全局静态数据

补充:static 修饰函数(文件内)

static void func(){}

  • 函数仅本文件可见,其他文件不能调用,隔离模块接口,防止重名。