商城型网站开发网站建设中国招投标网证书查询平台
文章目录
- 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;
}
 
特性:
- 存储在静态存储区
 - 只初始化一次(首次执行时)
 - 保持值跨函数调用(
 - 默认初始化为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);
 

