C语言中static作用

article/2025/11/8 19:05:47

1,static修饰局部变量

在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。
    特点如下:
  1)存储区:由于栈变为静态存储区rw data,生存期为整个源程序,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它;当static修饰局部变量时,可以达到改变局部变量生命周期的目的

啰嗦下(用Static关键字声明后,是变量成为静态的局部变量,即编译时就为变量分配存储单元,直到程序结束时才释放。这样,使得该局部变量有记忆功能,可以记忆上次的数据,不过由于仍是局部变量,因而只能在代码块内部使用(作用域不变)
          
  2)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

参照代码:

代码1:
//===================================
void test()
{int a=1;//函数调用完之后会被销毁,所以每次打印的都是2;a++;printf("%d\n",a);
}
int main()
{int i = 0;while (i < 10){test();i++;}return 0;
}代码2:
//===================================
void test()
{static int a=1;   //static改变局部变量的生命周期;变量没有被销毁时,不需要被再次定义;a++;printf("%d\n",a);
}
int main()
{int i = 0;while (i < 10){test();i++;}return 0;
}

代码1运行结果为:
2 2 2 2 2 2 2 2 2 2 (10个2),函数调用完之后a会被销毁

代码2运行结果为:
2 3 4 5 6 7 8 9 10 11 
原因在于static int a=1创建了一个静态的局部变量,使得局部变量a的生命周期变长,上一次的a值仍被保留在作用域内未被销毁,每次循环调用函数test()时,上一次的a值仍被保留在作用域内,不再执行static int a=1代码语句,即不需要对变量a重新初始化。

2,static修饰全局变量

当static修饰全局部变量时,可以达到改变全局变量作用域目的,使得全局变量只能在其被定义的源文件之下被找到。

在全局变量前加static,全局变量就被定义成为一个全局静态变量。
    特点如下:
   1)存储区:静态存储区没变(静态存储区在整个程序运行期间都存在);
   2)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。非静态全局 变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

例如:(参照代码) 

在test.c文件中有如下代码段:

extern int g_val;   //声明外部变量
int main()
{printf("%d\n",g_val);return 0;
}

在add.c文件中定义一个全局变量:

//定义一个全局变量
static int g_val = 2020;

调试运行

static 定义的全局变量即使加了extern也无法编译通过

3,static修饰函数,和2类似,也是改变了函数的作用域,本质上改变了链接属性。

static修饰函数的作用:函数本身是具有外部链接属性的,但是在static修饰后变成了内部链接属性了,只能在原文件内部里使用,其他文件是无法使用的(编译不过)

总结: 

 关键字static的作用是什么?在C语言中,关键字static有三个明显的作用:

第一、在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。 
第二、(考虑到数据的安全性)static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。 
第三、(考虑到数据的安全性)static修饰一个函数时,对函数的连接方式产生影响,则这个函数的只能在本文件中调用,不能被其他文件调用。这样的函数又叫作静态函数。使用静态函数的好处是,不用担心与其他文件的同名函数产生干扰,另外也是对函数本身的一种保护机制。


http://chatgpt.dhexx.cn/article/574evIO3.shtml

相关文章

对DSP的基本了解(一)--DSP是什么?

Preface&#xff1a;在学习一个新东西之前&#xff0c;我们需要对一些基本概念或者专业术语进行基本的理解&#xff0c;这样才能扫除壁垒&#xff0c;让学习更加高效。因此&#xff0c;DSP学习系列首先会比较注重对DSP相关术语上的理解。所以最开始&#xff0c;我们先来学习一些…

DSP学习

DSP数字电源学习一 软件环境搭建相关硬件资源TMS320C28x 32 位 CPU可编程控制律加速器 (CLA)片上存储器时钟和系统控制1.2V 内核、3.3V I/O 设计系统外设通信外设模拟系统 软件相关控制算法数据记录功能代码示例MathWorks Simulink 模型文档 由于最近工作需要&#xff0c;需要学…

DSP/BIOS详解入门

DSP/BIOS详解入门 百度百科DSPBIOS DSP/BIOS是TI公司特别为其TMS320C6000TM&#xff0c;TMS320C5000TM和TMS320C28xTM系列DSP平台所设计开发的一个尺寸可裁剪的实时多任务操作系统内核&#xff0c;是TI公司的Code Composer StudioTM开发工具的组成部分之一。 DSP/BIOS 实时操作…

DSP基础知识回顾

文章目录 1. 什么是DSP2. DSP与其他主流芯片的区别2.1 DSP与MCU的区别2.2 DSP与ARM的区别2.3 DSP与FPGA的区别 3. TI公司DSP具体型号的含义4. TMS320x2814的片内外设4.1 事件管理器4.2 模拟量转换为数字量的ADC采样模块4.3 串行通信接口SCI4.4 串行外围设备接口SPI4.5 局域网通…

DSP学习 -- 前言

已经换工作20天了&#xff0c;感觉又是换行业了一样。跳入DSP和FPGA的大坑了。 除了C语言基础还算可以&#xff0c;其他要学的东西太多了。 也是&#xff0c;终于可以又回到那种能学习和吸取新鲜知识的节奏了。相对来说虽然很累&#xff0c;但是我还是比较喜欢这种状态。总比吃…

最强ADI SHARC系列DSP:ADSP-SC589的开发入门详解

作者的话 ADI的SHARC系列DSP&#xff0c;现阶段最强的型号是SC589&#xff0c;那么我就以SC589为例&#xff0c;写一点资料&#xff0c;让新手能够比较便捷的熟悉开发环境&#xff0c;软硬件&#xff0c;顺利的进入开发。 文档解决的是入门的问题&#xff0c;所以不会深入去写…

嵌入式开发之DSP学习

一、ARM、DSP、FPGA ARM具有比较强的事务管理功能&#xff0c;可以用来跑界面以及应用程序等&#xff0c;其优势主要体现在控制方面&#xff1b;ARM是32位的单片机&#xff0c;其内部硬件资源的性能较高&#xff0c;可以加载操作系统成为其主要特点&#xff0c;有了操作系统&am…

[培训-DSP快速入门-2]:C54x DSP处理器的架构

作者主页(文火冰糖的硅基工坊)&#xff1a;https://blog.csdn.net/HiWangWenBing 本文网址&#xff1a;https://blog.csdn.net/HiWangWenBing/article/details/118889692 目录 1. C54x芯片的总体基本架构 1.1 冯诺依曼结构 1.2 哈佛结构 1.3 混合结构 1.4 C54x芯片结构 …

dsp基础算法

【小编】发现好文一篇&#xff0c;让大家对DSP中的基础算法和模型有一个初步的了解。 &#xff08;转载请保留原文链接 http://www.techinads.com/archives/41authored by 江申_Johnson&#xff09; 美国有一家很优秀的DSP公司–M6D&#xff08;m6d.com&#xff09;&#xff0c…

初学DSP(1)-TMS320F280049C入门

目录 前提 知识点 深入了解DSP和ARM的关系&#xff08;相同与区别&#xff09; DSP CMD学习笔记&#xff08;连接物理存储和逻辑存储&#xff09; CMD文件详解与DSP存储空间 DSP 程序远程升级 / Bootloader设计指南&#xff08;一&#xff09;—— 初识Bootloader/DSP引导…

【FPGA-DSP】第一期:DSP基础

目录 1. DSP基础 1.1 DSP基本概念 1.2 FPGA实现DSP的特点 2. DSP硬核的结构与使用 3. FPGA设计DSP技术 3.1. 浮点数与定点数的表示与转换 3.1.1. 双精度浮点数表示 3.1.2. 双精度浮点数与定点数的转换 本章作为FPGA数字信号处理的入门介绍课程&#xff0c;将介绍DSP的…

DSP基础知识

1.定义 数字信号处理器&#xff08;英文&#xff1a;Digital Signal Processor&#xff09;是集成电路芯片组成的用来完成数字信号处理任务的处理器。 2.功能 2.1ANR/ANC 其原理是降噪系统电路产生降噪MIC接收的外界环境噪音相等的反相信号&#xff0c;将噪声抵消。实现50-2K…

DSP的入门学习(一)

#硬件讲解与分类 1.DSP DSP&#xff08;digital signal processor&#xff09;是一种独特的微处理器&#xff0c;是以数字信号来处理大量信息的器件。其内部采用程序和数据分开的哈佛结构&#xff0c;具有专门的硬件乘法器&#xff0c;广泛采用流水线操作&#xff0c;提供特殊…

DSP-BIOS使用入门

从环境说到搭建第一个工程 请注意&#xff0c;此文默认读者已经对DSP及CCS V3.3环境有一定的了解了&#xff0c;知道cmd文件的配置&#xff0c;知道新建工程&#xff0c;编译并连接仿真器下载&#xff01;如果你对这些还都不熟悉&#xff0c;请先熟悉这些&#xff01;当然&…

【DSP】【第一篇】开始DSP学习

2022年6月14日 1. 部署开发环境 略。工作需要&#xff0c;TMS320C6678。 从今天开始学习DSP的知识。 后面会补充如何安装部署环境。 1.1 组件 1.1.1 SDK MCSDK&#xff08;CCSv5,CCSv6&#xff09;Path(全英文路径&#xff0c;无中文&#xff0c;无空格) 安装完之后&#xf…

DSP的入门学习(二)

DSP的入门学习&#xff08;二&#xff09; 1.了解所用的设备资源 图为 Code Composer Studio 6.0.0.00190 C/C开发环境 1.1 简单介绍建立一个CCS项目工程 上图所用到的是&#xff1a;硬件平台基于TMS320F28335芯片&#xff0c;软件平台基于TI的Code Composer Studio 6.0.0.…

[培训-DSP快速入门-1]:DSP概述(基本框架、CPU, GPU, FPGA比较,常见型号)

作者主页(文火冰糖的硅基工坊)&#xff1a;https://blog.csdn.net/HiWangWenBing 本文网址&#xff1a;https://blog.csdn.net/HiWangWenBing/article/details/118885060 目录 引言&#xff1a; 第1部分 什么是DSP 第2部分 为什么需要DSP 第3部分 DSP的基本框架 第4部分 C…

DSP,从入门到入土

文章目录 前言一、DSP架构二、内存管理三、 多核并行处理1.1、主从模式1.2、数据流模式 四、多核同步4.1、共享存储区变量4.2、硬件信号量 五、Cache的使用六、DMA的使用七、一些编程tips7.1 关键字7.2 struct定义7.3 存储7.4 动态内存7.5 编译器选项 八、八核固化附录 前言 下…

用电器分析识别装置(H 题)--2021 年全国大学生电子设计竞赛

用电器分析识别装置&#xff08;H 题&#xff09;--2021 年全国大学生电子设计竞赛 一 任务二 要求1. 基本要求2&#xff0e;发挥部分 三 说明四 评分标准优秀作品开源参考&#xff08;来源立创开源平台&#xff09;文件 一 任务 设计并制作一个根据电源线电流的电参量信息分析…