小学生学C++编程语法知识(C++中的 static 详解)
2026/8/3 15:51:40 网站建设 项目流程


C++中的 static 详解

同学们,今天我们学习 C++ 中一个非常神奇的关键词:

static(静态)

它看起来只有一个单词,但是在 C++ 里面有很多不同的作用。

我们先记住一句最重要的话:

static 的核心作用:改变变量或者函数的“生命周期”和“可见范围”。

简单理解:

  • 普通变量:出生 → 使用 → 消失

  • static变量:出生 → 一直活着 → 程序结束才消失


一、先理解一个问题:变量什么时候消失?

我们先看普通变量:

#include <iostream> using namespace std; void test() { int x = 10; cout << x << endl; } int main() { test(); test(); }

运行:

10 10

为什么两次都是10?

因为:

第一次:

进入test() 创建x x=10 输出 离开test() x消失

第二次:

重新进入test() 重新创建x x=10

所以:

普通变量每次调用函数都会重新创建。


二、static变量:只创建一次

现在加入static:

#include <iostream> using namespace std; void test() { static int x = 10; cout << x << endl; x++; } int main() { test(); test(); test(); }

输出:

10 11 12

为什么?

第一次:

创建x x=10 输出10 x增加到11

第二次:

不会重新创建x 直接使用以前的x 输出11 增加到12

第三次:

输出12

同学们理解:

普通变量:

像每天发的新铅笔:

星期一: 新铅笔 用完丢掉 星期二: 再发一支

static变量:

像你的名字:

出生以后一直存在 不会每天重新生成

三、static最重要的作用1:保存函数中的数据

这是最常见的用途。

例如:

我们想统计函数调用次数。

普通写法:

int count() { int n=0; n++; return n; }

调用:

cout<<count()<<endl; cout<<count()<<endl; cout<<count()<<endl;

结果:

1 1 1

为什么?

因为:

每次n都是新的。


使用static:

int count() { static int n=0; n++; return n; }

结果:

1 2 3

因为:

n记住了以前的值。


四、static的作用2:限制变量的作用范围

比如:

int a=10; int main() { }

这个变量:

整个程序都可以访问。

叫:

全局变量


但是:

如果:

void test() { static int x=10; }

那么:

x只能在test里面使用。


例如:

void test() { static int x=10; } int main() { cout<<x; }

错误!

因为:

x只属于test函数

五、static和普通局部变量的区别

看这个表:

特点普通局部变量static局部变量
存储位置栈区静态存储区
生命周期函数结束消失程序结束消失
创建次数每次调用一次只创建一次
初始值每次重新初始化只初始化一次

六、static变量只初始化一次

看代码:

void test() { static int x=5; cout<<x<<endl; x++; }

第一次:

创建x 赋值5 输出5

第二次:

不会:

x=5

而是:

继续使用旧值6

所以:

static初始化:

第一次执行时初始化,以后不再初始化。


七、static在递归中的经典用途

有时会看到。

例如:

计算递归次数:

void dfs() { static int cnt=0; cnt++; cout<<"进入次数:"<<cnt<<endl; }

这里:

cnt会一直保存。


八、static修饰全局变量

例如:

文件1:

int a=100;

文件2:

extern int a;

可以访问。

但是:

如果:

static int a=100;

那么:

只能当前文件使用。

也就是说:

static可以保护变量:

别人看不到我

九、static修饰函数

例如:

普通函数:

void hello() { }

其他文件可以调用。

但是:

static void hello() { }

表示:

这个函数只在当前文件有效。


十、C++面向对象中的static(重点)

以后学习类的时候,会遇到:

1. static成员变量

例如:

学生类:

class Student { public: static int count; };

表示:

所有学生共享一个count。


比如:

创建学生:

Student a; Student b; Student c;

普通变量:

a有一个 b有一个 c有一个

static:

所有学生共同拥有一个

像:

学校学生总人数。


2. static成员函数

例如:

class Student { public: static void show() { cout<<"hello"; } };

可以直接:

Student::show();

不用创建对象。


十一、生活中的比喻总结

普通变量:

像:

一次性纸杯 用一次 扔一次

static变量:

像:

教室墙上的时钟 大家一起看 一直存在

十二、信奥竞赛中static常见用途总结

同学们参加比赛时,有可能见到:

1. 记录次数

static int cnt;

例如:

  • DFS次数

  • 递归次数

  • 搜索节点数量


2. 保存状态

例如:

static int ans;

保存答案。


3. 防止重复初始化

例如:

static bool flag=false;

第一次执行:

false

以后:

保持修改后的状态。


十三、一句话记忆

static = 静态的、固定的、不会重新出生的东西。

变量:

static让变量“活得更久”。

函数:

static让函数“别人看不到”。

类:

static让数据“大家共享”。


课堂练习:

思考下面程序输出:

#include<iostream> using namespace std; void fun() { static int x=1; x*=2; cout<<x<<" "; } int main() { fun(); fun(); fun(); }

答案:

2 4 8

原因:

第一次: x=1 x*=2 x=2 第二次: x=2 x*=2 x=4 第三次: x=4 x*=2 x=8

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询