static的三个作用

article/2025/11/8 18:59:45

static作用

  • 一、修饰局部变量-静态局部变量
  • 二、修饰全局变量-静态全局变量
  • 三、修饰函数-静态函数
  • 四、总结和注意点


一、修饰局部变量-静态局部变量

static修饰局部变量时,改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束,但是作用域不变,仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

代码1:没有static修饰的局部变量

#include <stdio.h>
void test(){int i = 0;i++;printf("%d ", i);
}
int main()
{   int i = 0;for (i = 0; i < 10; i++){test();}system("pause");return 0;
}

结果:

分析:
变量i出了作用域之后,生命周期和作用域均无效。每次执行 for 循环的时候 i 都会被重新定义和初始化。


代码2:static修饰局部变量

#include <stdio.h>
void test(){static int i = 0;i++;printf("%d ", i);
}
int main()
{   int i = 0;for (i = 0; i < 10; i++){test();}system("pause");return 0;
}

结果:

分析:
变量i只在第一次调用的时候,创建和初始化一次,此后执行i++,每次加一。

二、修饰全局变量-静态全局变量

static修饰全局变量时,这个全局变量只能在本源文件内使用,不能在其他源文件内使用。

代码1:没有static修饰的全局变量
t.c

//t.c
int g = 2020;

test.c

//test.c
#include <stdio.h>
extern int g;
int main()
{printf("%d\n",g);system("pause");return 0;
}

结果:

分析:
结果是2020。


代码2:static修饰的全局变量
t.c

//t.c
static int g = 2020;

test.c

//test.c
#include <stdio.h>
extern int g;
int main()
{printf("%d\n",g);system("pause");return 0;
}

结果:
在这里插入图片描述
分析:
生成错误,无法解析的外部符号_g,无法解析的外部命令,被static修饰的全局变量只能在本源文件内使用,不能在其他源文件内使用。

三、修饰函数-静态函数

static修饰函数,该函数只在本文件内被调用或访问,不能跨文件访问,其他文件中可以定义相同名字的函数,不会发生冲突。

代码1:没有static修饰的函数
add.c

//add.c         
int MyAdd(int x, int y){return x + y;
}

s.c

//s.c
#include <stdio.h>
extern int MyAdd(int x, int y);
int main()
{printf("%d\n", MyAdd(1, 1));system("pause");return 0;
}

结果:

分析:
输出结果2。


代码2:static修饰的函数
add.c

//add.c
static int MyAdd(int x, int y){return x + y;
}

s.c

//s.c
#include <stdio.h>
extern int MyAdd(int x, int y);
int main()
{printf("%d\n", MyAdd(1, 1));system("pause");return 0;
}

结果:

分析:
无法解析的外部符号 _MyAdd,该符号在函数 _main 中被引用,无法解析的外部命令。被static修饰的函数只在本文件内被调用或访问,不能跨文件访问。


代码3:与被static修饰函数相同名字的函数
my.c

//my.c
int MyAdd(int a, int b){return a-b;
}#include <stdio.h>
int main()
{printf("%d\n", MyAdd(1, 1));system("pause");return 0;
}

结果;
在这里插入图片描述分析:
static修饰函数时,其他文件中可以定义相同名字的函数,不会发生冲突。

四、总结和注意点

1.static修饰局部变量时,改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束,作用域仍为局部作用域。
2.static修饰全局变量时,这个全局变量只能在本源文件内使用,不能在其他源文件内使用。
3.static修饰函数时,该函数只在本文件内被调用或访问,不能跨文件访问,其他文件中可以定义相同名字的函数,不会发生冲突。
4.全局变量和函数在外部使用声明时,extern关键字是必须的,声明可以多次。


http://chatgpt.dhexx.cn/article/kvavpP8q.shtml

相关文章

java中的静态变量的作用域_详解JAVA中static的作用

1、深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用;如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的;如果是说 可以构成 静态代码块,那别人认为你还可以; 如果你说可以构成 静态内部类, 那别人认为你不错;如果你说了静态导包,那别人认为你…

express.static 作用及用法

express相信是很多人用nodejs搭建服务器的首选框架&#xff0c;相关教程有很多&#xff0c;也教会了大家来如何使用。如果你想更深的了解他的细节&#xff0c;不妨和我一起来研究一下。 先来看一个每个人都用到的方法app.use(express.static(__dirname/public)); 你肯定在你的a…

java static的作用

static是什么 static是java中的关键字&#xff0c;static表示”全局”、“静态”的意思&#xff0c;用来修饰成员变量和成员方法&#xff0c;定义的变量&#xff0c;我们通常将用static修饰的成员称为静态变量&#xff0c;静态方法或者静态成员。 static的作用 被static修饰…

static的作用有哪些?

C语言中的static的作用有&#xff1a;1.修饰局部变量。2.修饰全局变量。3.修饰函数。 1.修饰局部变量。 如图&#xff1a; 当只用int 定义变量a时,此时程序运行结果为&#xff1a; 程序运行结果为10个2&#xff0c;这是为什么呢&#xff1f;&#xff1f; 原因是此时的变量a为…

C语言中 static作用

在C语言中&#xff0c;static的字面意思很容易把我们导入歧途&#xff0c;其实它的作用有三条。隐藏保持数据持久初始化为0 该图是下面文字的总结&#xff1a; 1.先来介绍它的第一条也是最重要的一条&#xff1a;隐藏。 当我们同时编译多个文件时&#xff0c;所有未加static前…

C语言中static作用

1,static修饰局部变量 在局部变量之前加上关键字static&#xff0c;局部变量就被定义成为一个局部静态变量。 特点如下: 1&#xff09;存储区&#xff1a;由于栈变为静态存储区rw data&#xff0c;生存期为整个源程序&#xff0c;只能在定义该变量的函数内使用。退出该函…

对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;当然&…