C 局部静态变量

核心定义

在函数内部用static修饰的变量,生命周期超过函数执行范围

核心特性

  1. 存储位置 存放于静态数据区(BSS/Data 段),不在栈区,程序整个运行期间一直存在;不会在每次函数调用时新建、销毁
  2. 初始化规则
    ● 不显式初始化:数值类型默认 0,指针类型默认空指针NULL
    ● 显式初始化:只在程序启动阶段执行 1 次,后续重复调用函数不会再次执行初始化语句
  3. 作用域
    作用域仅限定义它的函数内部,外部不能直接访问; 但是多次调用函数之间,变量值会保留,不会重置
  4. 分类补充(拓展)
    ● 函数内static:局部静态变量
    ● 全局static:静态全局变量,存储同样在静态区,作用域限制为本.c 文件,其他源文件无法 extern 引用

示例代码

c 复制代码
#include <stdio.h>
void test()
{
    static int num = 0; // 仅第一次调用初始化一次
    num++;
    printf("num = %d\n", num);
}
int main()
{
    test(); //输出1
    test(); //输出2
    test(); //输出3
    return 0;
}

普通局部变量每次调用函数都会重新创建,每次都是 0;static 静态变量会保存上一次的值

易混淆点

  1. 生命周期:全局 > 局部 static > 普通局部变量
  2. 内存:普通局部变量在栈;static 变量在静态区
  3. 初始化时机:static 编译 / 程序启动初始化;普通局部变量运行到该行才创建

用途

● 保存函数多次调用之间的状态(计数器)

● 只初始化一次的资源

● 限制全局变量作用域在当前文件(static 全局)

相关推荐
大都督会赢的2 小时前
C++第一节课
开发语言·c++
“AI国潮设计-小江”3 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc
小王C语言3 小时前
Qt常用控件:容器类控件,标题分组框、标签页(浏览器标签)
开发语言·qt
我是唐青枫3 小时前
Kotlin Delegation 委托详解
开发语言·kotlin
qq_406981033 小时前
共享变量一 关于extern与const
开发语言·c++
FRing034 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
小嘉丶学长5 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
迪菲赫尔曼5 小时前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测
chari克里6 小时前
QT5.15.2 + msvc2022部署全流程说明(windows可联网环境)
开发语言·c++·qt