C语言学习笔记---static关键字
1、static修饰局部变量
在函数体内,只初始化一次,被static声明过的局部变量在调用过程中值不变。原因:在任意函数内定义局部变量,存储在线程中的栈区,出函数时自动摧毁,所以在每次调用这个函数时,局部变量的初始值都为定义的值在进行运算。static在修饰局部变量时,存储在静态区,函数返回时值保持不变,出函数不销毁,下一次进入函数依然存在。
1 void test() 2 { 3 int a = 10; 4 a++; 5 printf("%d ", a); 6 } 7 8 void static_test() 9 { 10 static int a = 10; 11 a++; 12 printf("%d ", a); 13 } 14 int main() 15 { 16 test(); 17 static_test(); 18 test(); 19 static_test(); 20 return 0; 21 }
上述代码运行结果为11,11,11,12。主要是因为static定义过的局部变量存储在静态变量区,在调用过程中值不变。
2、static修饰全局变量
被static声明过的全局变量无法被其他文件调用,只能被当前文件所调用,其他文件可以定义与其同名的变量,两者互不影响。未被static声明过的全局变量加extern关键字可以被调用。 在定义不需要与其他文件共享的全局变量时,加上static关键字能够有效地降低程序模块之间的耦合,避免不同文件同名变量的冲突,且不会误使用。
3、static修饰函数
和全局变量类似,被static声明过的函数无法被其他文件调用,只能被当前文件所调用。不同文件可以使用相同名字静态函数 ,非静态函数可以在另一个文件直接引用。
4、静态变量与全局变量的区别
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库