当前位置: 首页 > news >正文

static的三种作用

文章目录

  • 1.C 静态局部变量时
  • 2.C 静态全局变量/函数时
  • 3.C++ 类静态成员时
    • 静态成员变量
    • 静态成员函数


1.C 静态局部变量时

作用:函数内的“记忆者”
代码:

#include <stdio.h>void counter() {static int count = 0;  // 只初始化一次!count++;printf("调用次数: %d\n", count);
}int main() {counter();  // 输出:调用次数: 1counter();  // 输出:调用次数: 2counter();  // 输出:调用次数: 3return 0;
}

特性:

  1. 存储在静态存储区
  2. 只初始化一次(首次执行时)
  3. 保持值跨函数调用(
  4. 默认初始化为0(static int x;等价于static int x = 0;

内存布局:
±------------------+
| 栈区 | ← 普通局部变量
±------------------+
| 堆区 | ← malloc分配的内存
±------------------+
| 静态存储区 | ← static变量在此
| ±-------+ |
| | count | |
| ±-------+ |
±------------------+
| 代码区 | ← 程序指令
±------------------+

2.C 静态全局变量/函数时

作用:文件内的“隐私保护者”
代码:
module1.c

static int hiddenVar = 42;  // 只能在本文件访问static void privateFunc() { // 只能在本文件调用printf("私有函数\n");
}void publicFunc() {privateFunc();  // 正确:同文件可调用printf("访问隐藏变量: %d\n", hiddenVar);
}

module2.c

extern void publicFunc(); int main() {publicFunc();// privateFunc();   // 错误!不可见// hiddenVar = 10; // 错误!不可见return 0;
}

特性:
1.实现封装:隐藏模块内部实现细节
2.避免命名冲突:不同文件的同名static变量互不影响
3.提高安全性:防止外部代码意外修改内部状态

3.C++ 类静态成员时

静态成员变量

作用:类的”共享状态“
代码:

class Player {
public:static int totalPlayers;  // 声明Player() {totalPlayers++;  // 所有对象共享计数器}static int getTotal() { return totalPlayers; }
};// 必须在类外定义和初始化!
int Player::totalPlayers = 0; int main() {Player p1;Player p2;cout << "玩家数量: " << Player::getTotal(); // 输出2
}

特性:
1.不属于任何对象,属于类本身
2.必须在类外单独定义和初始化
3.可通过类名直接访问(Player::totalPlayers)
4.所有对象共享同一份副本

静态成员函数

作用:类的“工具集”
代码:

class MathUtils {
public:static double pi() { return 3.1415926; }static int add(int a, int b) { return a + b; }
};// 使用示例:
double circleArea = MathUtils::pi() * radius * radius;
int sum = MathUtils::add(5, 3);

在这里插入图片描述

相关文章:

  • 重读《人件》Peopleware -(16)Ⅲ 适当人选 Ⅰ霍恩布洛尔因素(上)
  • callback的原理和机制
  • <10>-MySQL索引特性
  • 【电声耦合】TaOsSi和NbOsSi超导中的电子-声子耦合
  • c++编译第三方项目报错# pragma warning( disable: 4273)
  • 多线程下 到底是事务内部开启锁 还是先加锁再开启事务?
  • AnimateCC及CreateJS:打飞机的4版本V1、V2、V3、V4
  • hot100 -- 12.栈系列
  • 金蝶云星空BOS开发
  • Linux进程间通信(IPC)详解:从入门到理解
  • 深度分析Javascript中的Promise
  • 人工智能学习19-Pandas-设置
  • 当遇到“提交失败:404”的问题时,通常表明前端请求的URL无法正确匹配到后端的Servlet或资源。
  • aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(四)
  • 【办公类-25-05】20250514 Python模拟UIBOT上传园园通截图(自动最小化界面,时间部分的删除和黏贴)
  • SCADA|KingSCADA对比显示任意几条实时曲线的方法
  • 理论物理学中的规范场论与全息原理
  • Go语言底层(五): 深入浅出Go语言的ants协程池
  • C#最佳实践:推荐使用泛型而非装箱、拆箱
  • 华为云Flexus+DeepSeek征文 | 基于Dify构建股票分析助手
  • 视频解析网站制作/优化英文
  • 杭州开发app/百度seo排名360
  • 外国人可以在中国做网站吗/seo整站优化费用
  • 做财务需要关注哪些网站/google推广方式和手段有哪些
  • 普升高端品牌网站建设/做外贸推广
  • 南京公司网站建设怎么收费/友情链接互换