C语言static关键字

【C语言】关键字static的初步剖析 关键字 static 详解 阅读详情

文章目录


static

static中文意思为静态的,其实关键作用就两点

1.static修饰的局部变量会从堆栈区存放在静态区,保持变量内容的持久

代码一
void fun()
{
	int i = 0;
	i++;
	printf("%d",i);
}
int main()
{
	for(int i = 0;i<10;i++)
	{
		fun();
	}	
	return 0;
}     //最终代码会打印出来 1 1 1 1 1 1 1 1 1 1

代码二
void fun()
{
	static int i = 0;//加入了static
	i++;
	printf("%d",i);
}
int main()
{
	for(int i = 0;i<10;i++)
	{
		fun();
	}	
	return 0
}     //最终代码会打印出来 1 2 3 4 5 6 7 8 9 10

这就是因为代码一,fun()函数中的变量 i (在栈区)随函数入栈出栈,所以每次循环后,再次调用函数, 变量 i 又为0,又从0开始+1;
而在代码二中,fun()函数的变量i用static修饰后,改变了其存储类型,全局区(静态区)保存,函数调用完后出栈,但是变量 i 此时并不会,因为压根不在栈区,所以每次调用函数都在原有基础上+1,

2.static修饰全局变量和修饰函数,将它们的外部链接属性改为内部链接属性(说白了就是只有在自己的文件中使用),不能被外部其他文件直接访问(注意是直接!!!)

//文件1  test.c
#include<stdio.h>
static int g_val = 10;
void show()
{
	printf("%d",g_val); //static修饰,可以在自己内部文件的show函数中使用
}

//文件2  main.c
#include<stdio.h>
show()
int main()
{
	show();   //这个文件声明了show()函数,调用show函数,相当于间接使用了g_val
}

另外static也有一些其他巧妙的用处
默认初始化为0。其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00(栈区变量默认以CC填充,堆区变量默认以CD填充)。如初始化一个稀疏矩阵,我们可以通过static把所有元素都置0(而不是用代码一个一个置为0),然后把不是0的几个元素赋值。


一句话总结static:首先 static 的最主要功能是隐藏,其次因为 static 变量存放在静态存储区,所以它具备持久性和默认值0。

QGC 转发RTSP流 到RTMP服务器 需求: QGC安卓版在接收摄像机RTSP视频流的时候,需要将视频推送到指定的RTMP服务器。 分析: QGC在处理音视频的时候使用了GStreamer这套框架,本身这套框架是跨平台的,所以无需关系环境,只要想到相应位置,添加对应功能代码,然后配置好安卓端的依赖库即可。 添加位置: GstVideoReceiver.cpp -》start函数负责音视频的流的播放,只需在此处添加上封装好的推流函数即可。 同理在stop中添加停止推流功能。 方便起见,可在界面上配置rtmp的推流地. 阅读详情

相关推荐

【低轨】Starlink星链-Ku波段OFDM信号同步机制与PNT应用潜力

本文深入解析了Starlink星链Ku波段OFDM信号的同步机制及其在定位、导航与授时(PNT)领域的应用潜力。研究发现,其信号帧内嵌的同步序列具有相位恒定特性,支持超长相干积分,可在极低信噪比下实现高精度伪距测量,为利用低轨卫星通信信号实现高精度PNT服务提供了新的技术路径。

weixin_29250403的博客 730

C语言之static关键字详解

static,英文意思静态的,作为C语言常用关键字中一个很重要的关键字,其用法多样且比较难以理解,本篇博客将带你详细了解掌握关键词static的用法......

weixin_62604754的博客 1万+

OpenMV模块视觉测距(避障)+颜色识别+TFT-LCD显示(实现原理与代码分析)

上图所示代码实际运行的帧率比较低,主要原因有以下两个:1.硬件问题,博主使用的版本比较低,可以尝试使用高版本OpenMV2.图像滤波问题。之前加入图像滤波是想提高色块识别的准确性,但是相应的运算速度也会下降。

ediykk的博客 1万+

C语言static 关键字总结

static 关键字总结: 变量可以被static 修饰,意义有发生变化吗? 下面我们看个例子: (1)变量不加 static 修饰 #include &lt;stdio.h&gt; void test() { int num = 0; num++; printf("%d ", num); } int main() { int i = 0; for...

IT小书生的博客 2万+

RPG MV游戏数据修改指南:从JSON解析到脚本进阶

游戏数据修改是游戏开发与逆向工程中的常见实践,其核心原理在于解析和操作游戏资源文件。许多现代游戏引擎采用结构化数据格式(如JSON)存储游戏配置,这为外部修改提供了可能。通过理解文件结构、数据格式与游戏逻辑的关联,开发者或爱好者可以调整游戏平衡、修复问题或实现个性化定制,这不仅能深化对游戏设计机制的理解,也具备实际的技术学习价值。本文以基于Web技术栈的RPG Maker MV(RPG MV)引擎为例,其游戏数据多以明文JSON存储,结构清晰。文章将具体阐述如何安全地修改角色属性、物品效果、敌人数据及技能公

weixin_29001419的博客 403

L298N电机驱动模块的接线使用与代码实现

#include "iostm8s208mb.h" #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; // 关于LED灯的宏定义 #define LED2 PI_ODR_ODR2 //输出量 #define LE

Clichong 13万+

【C语言】static关键字详解

C/C++中static关键字

weixin_59511824的博客 3688

手把手教你使用ConvNeXt训练自己数据集和推理,ConvNeXt模型训练(CVPR 2022),一个能挑战 Vision Transformer 的卷积神经网络,含完整代码和数据集

手把手教你使用ConvNeXt训练自己数据集和推理,ConvNeXt模型训练(CVPR 2022),一个能挑战 Vision Transformer 的卷积神经网络,含完整代码和数据集

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1449

【C语言】static关键字

static是 C/C++中的关键字之一,是常见的函数与变量(C++中还包括类)的修饰符,它常被用来控制变量的存储方式和作用范围。在众多高级语言中都有其作为关键字或函数出现。

t5y22的博客 1662

YOLO26 魔术师专栏|全网独家首发!2026 原创级创新赋能 CV 全场景

基于 YOLO26 核心架构迭代,融合原创自研、2026 AAAI/CVPR/ICCV 顶会前沿成果,打造更高效、更灵活、更具创新性的计算机视觉解决方案!

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4359

RK3568开发笔记- (TX/RX) RGMII delayline 功能调试

本文详细介绍了RK3568芯片RGMII接口delayline功能的调试过程。针对千兆以太网通信不稳定问题,通过分析RGMII时序要求,利用RK3568内置的delayline功能补偿信号延迟。调试方法包括扫描delayline窗口、测试中间值配置、优化硬件设计等步骤。文章还总结了常见问题解决方案,如PHY选型建议和自动扫描功能配置。最终实现了千兆速率下丢包率降至0.01%以下的目标,为类似开发场景提供了实用参考。

flypig has a dream! 316

c语言static的用法_C语言关键字 static 的用法

接上文:C语言的32个关键字C语言 static 关键字的常见用法有三种:用于局部变量的修饰符;用于全局变量的修饰符;用于函数的修饰符。1、用于局部变量的修饰符当 static 用于修饰局部变量时,通常是在某个函数体内,只能在该函数内被调用。这样定义的变量通常被称为局部静态变量,它的值不会因为函数调用的结束而被清除,当函数再次被调用时,它的值是上一次调用结束后的值。如下面这段代码所示,变量 x 是...

weixin_35756130的博客 2万+

芒果YOLOv8改进52:主干Backbone篇之GhostNetV2:提出原创GhostNetV2 架构升级版:引入长距离注意力机制增强廉价操作,构建更强端侧轻量型骨干,打造高效轻量级检测器

长距离注意力机制增强廉价操作,打造轻量级检测器

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1611

C语言中 static 关键字详解

/ 输出: 函数调用次数: 1, 全局计数器: 1。// 输出: 函数调用次数: 2, 全局计数器: 2。// 输出: 函数调用次数: 3, 全局计数器: 3。printf("私有变量值: %d\n", file_private_var);

2401_86312340的博客 1361

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

static在c语言中的作用_C语言关键字 static 的用法

接上文:C语言的32个关键字C语言 static 关键字的常见用法有三种:用于局部变量的修饰符;用于全局变量的修饰符;用于函数的修饰符。1、用于局部变量的修饰符当 static 用于修饰局部变量时,通常是在某个函数体内,只能在该函数内被调用。这样定义的变量通常被称为局部静态变量,它的值不会因为函数调用的结束而被清除,当函数再次被调用时,它的值是上一次调用结束后的值。如下面这段代码所示,变量 x 是...

weixin_39977776的博客 2323

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

初识C语言——关键字static的作用

C语言关键字static的介绍,static修饰局部变量,static修饰全局变量,static修饰函数

m0_70980326的博客 8491

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C 语言 static 关键字详解

C 语言 static 关键字详解

嘻嘻爱编码的博客 3600

C语言关键字之const和static

文章目录C语言关键字一.简介二.static1.static修饰变量2.static修饰函数三.const1.const 修饰普通变量2.const修饰指针的三种效果 C语言关键字 一.简介 C语言有32个关键字,我们没有必要一个一个背下来,在使用过程中,我们会慢慢一个一个的熟悉,这里我给大家注意简绍一下,const 和static这两个关键字 二.static static关键字在c语言中比较常...

weixin_45631738的博客 4346

C语言static关键字总结

static关键字总结

北北北 1340

C语言const、static、extern、volatile关键字总结

一、const 关键字总结: 作为一个程序员,我们看到关键字const时,首先想到的应该是:只读。因为,它要求其所修饰的对象为常量,不可对其修改和二次赋值操作(不能作为左值出现)。看几个例子的中const作用: 1. 修饰常量 用const修饰的变量是不可变的,对const变量赋值:一是在声明时对变量初始化,二是在函数中声明const形参,函数调用时会得到实参的值。以下两种定义形式在本质上是...

心中的日月的博客 5177

C语言中,static关键字举例——全局static变量

C语言中,可以在全局作用域中使用static关键字:被static关键字修饰的变量或函数,仅在本".c文件"中可见,而在其他".c文件"中,不可见。例如,在t1.c中的全局作用域,定义static函数func,则在t2.c中,无法使用t1.c中定义的func函数,即使在t2.c中,使用extern关键字声明了func函数。 实验代码如下: 1、默认使用extern修饰符 /*file:t

lslxdx的专栏 2085

C语言static关键字技术详解

在C语言中,关键字用于声明变量或函数为静态的,即其生命周期和作用域仅限于当前文件。关键字在编程中扮演着重要的角色,它可以帮助我们提高代码的性能和可维护性。本文将深入探讨关键字的工作原理,并解释其背后的技术细节。文章将分为三个部分,本部分将详细介绍的基本概念和原理。关键字用于声明变量或函数为静态的,即其生命周期和作用域仅限于当前文件。这意味着在文件外,其他文件无法访问这些静态变量或函数。在C语言中,我们可以使用关键字来声明静态变量。这可以通过在变量声明前加上来实现,如下所示: 在这个例子中,是一个静态变量

极客代码 1644

c语言 static_C语言面试每日一题:static 关键字

1 题目写出下面程序的输出结果//公众号:南风过境蜻蜓飞//static关键字的使用#includeintsum(inta){autointc=0;staticintb=3;c+=1;b+=2;return(a+b+c);}intmain(void){inti;inta=2;...

weixin_39859061的博客 318

C语言关键字用法实例详解——static(二)

上一篇博客详细介绍了volatile关键字,这篇博客介绍一下static关键字。

戚晨夕的博客 2114

C语言中static关键字详解

C语言中staic关键字很简单,简单到你的任何一个项目中可以不写一个staic关键字也是没有问题的。写这篇章主要是一下自己的staic的理解和应用,当然在章开头依旧要照本宣科简述一下static关键字。 1、简述 static关键字在嵌入式C语言当中很简单,它有三个作用: 作用一:在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 void test1(void) { unsigned char a; static unsigned char b; … ...

人生一路,点滴记录 4864

C语言中常见关键字(static,extern)

/ 错误:无法访问file1.c中的static全局变量。// 静态全局变量,仅在file1.c中可见。(生命周期),使其从自动存储期(函数调用结束后销毁)变为静态存储期(程序运行期间一直存在)。当你有一个全局变量定义在一个文件中,并希望在另一个文件中访问它时,你可以使用。其他源文件无法访问该变量。:用于限制全局变量的作用域,避免其他文件访问,增强模块化。// 输出: Count: 1。:仅限于定义它的源文件(文件作用域)。:与程序的生命周期相同(静态存储期)。:与程序的生命周期相同(静态存储期)。

weixin_48867130的博客 1305
上一篇: const修饰的常量指针与指针常量
下一篇: C语言之函数指针,指针函数,回调函数
kklovecode
博客等级 码龄4年 127粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kklovecode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值