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

C语言| 静态局部变量

C语言| 局部变量、全局变量

【自动变量】(auto)

局部变量就是auto型,可省略auto。

【静态局部变量】(static)

static修饰过的局部变量==静态局部变量,它就会存储在静态存储区了,未初始化,系统自动将其初始化为0。

静态存储区,主要用于存放静态数据和全局数据。

静态局部变量存在于程序运行的整个过程中。

【知识点总结】
1 static修饰后的局部变量,叫做静态局部变量。直到整个程序都结束,才会释放静态局部变量的内存空间。
2 定义成static型的变量是存放在静态存储区中的,在程序的整个运行过程中都不会释放。       

3 static int a; //静态局部变量未初始化,系统自动赋值 0 或者 空字符 ‘\0’ (对应字符变量)

i 静态局部变量,定义并初始化的语句,只执行一次。(只能在它作用范围内使用)每次调用,会使用上一次函数调用结束后的值。直到整个程序都结束了,才会释放空间。

ii 相当于全局变量,是因为它们都存放在静态存储区中,所以它们都一直存在程序运行的整个过程中。

4 静态局部变量(同全局变量一样)长期占用内存不放,当调用次数过多时会不知道当前变量的值是多少。静态局部变量能不用就尽量不用。

5 对于全局变量来说,

i 没有使用static修饰,那么其他文件只需要直接使用extern对该全局变量声明,就能直接使用该全局变量。

ii 使用static修饰,即使其他文件使用extern,对它进行声明,也不能使用它。

[程序代码分析]

先定义一个函数,JTJB(),主函数再调用它。
[JTJB()函数]
x定义的是静态局部变量,每次调用结束后,都不会释放。
一直存在整个程序运行中,直到整个程序都结束,才被释放。
所以,每次调用结果,x的值都有变化,相当于全局变量。
static int x=0; //只执行一次,保留上次函数调用结束的值

#include <stdio.h>

void JTJB(void); //函数声明

int main(void)
{
    JTJB();
    JTJB();
    JTJB();
    
    return 0;
}

void JTJB(void)
{
    //静态局部变量,系统自动初始化为0
    static int x;
    int y = 0;

    ++x;
    ++y;

    printf("x = %d, y = %d", x, y);
    printf("\n");

    return;
}

http://www.xdnf.cn/news/6017.html

相关文章:

  • 3级-运算符
  • 从数据中台到数据飞轮:实现数据驱动的升级之路
  • 论文学习_Trex: Learning Execution Semantics from Micro-Traces for Binary Similarity
  • SparkSQL入门指南:从基础到实践的全面解析
  • 配置Nginx启用Https
  • 豌豆 760 收录泛滥现象深度解析与应对策略
  • FedTracker:为联邦学习模型提供所有权验证和可追溯性
  • Unity3D 序列化机制:引擎内的应用场景和基本原理
  • vue3项目创建-配置-elementPlus导入-路由自动导入
  • 江苏发改委回复:分时电价调整对储能项目的影响 源网荷储一体化能量管理系统储能EMS
  • 为什么企业建站或独立站选用WordPress
  • C程序的存储空间分配
  • 汉得 x 真味生物|H-ZERO PaaS项目启动,共启数字化新征程!
  • 可视化+智能补全:用Database Tool重塑数据库工作流
  • java 结合 FreeMarker 和 Docx4j 来生成包含图片的 docx 文件
  • 七、深入 Hive DDL:管理表、分区与洞察元数据
  • 邀请函|PostgreSQL培训认证报名正式开启
  • 演员评论家算法
  • LS-DYNA一箭穿心仿真分析
  • Oracle CDB 与 Non-CDB (NoCDB) 的区别
  • Linux(1)编译链接和gcc
  • typedef unsigned short uint16_t; typedef unsigned int uint32_t;
  • Lin4neuro 系统详解
  • Qt应用程序启动时的一些思路:从单实例到性能优化的处理方案
  • zabbix最新版本7.2超级详细安装部署(一)
  • VS Code怎么设置python SDK路径
  • 理解计算机系统_并发编程(5)_基于线程的并发(二):线程api和基于线程的并发服务器
  • Ascend的aclgraph(六)AclConcreteGraph
  • 技术并不能产生一个好的产品
  • solidwors插件 开发————仙盟创梦IDE