static局部变量(静态局部变量的用法)
有时希望函数中的局部变量的值在函数调用结束后不消失而继续保留原值,即其占用的储存单元不释放,在下一次调用此函数时,该变量已经有值(就是上一次函数调用结束时的值)。这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。通过下面的例子可以了解它的特点:
#include <stdio.h>
int main() {
int f(int);
int a=2,i;
for(i=0; i<3; i++) {
printf("%d\n",f(a));//这里的f(a)换为f(i)就又是一道题目哦
}
return 0;
}
int f(int a) {
auto int b;
static int c=3;
b++;
c++;
return (a+b+c);
}
分析:
第一次调用结束后,由于c被定义为静态局部变量,在函数调用结束后,它并不释放,保留c的值为4,同样第二次,第三次分别是5和6。c的储存空间不会释放。而b由于为auto型,所以每次调用函数结束以后都会释放储存空间。
说明:
1,静态局部变量属于静态储存类别,在静态储存区内分配储存单元。在整个程序运行期间都不释放。而自动变量(级动态局部变量)属于动态储存类别,分配在动态储存区空间而不在静态储存空间,函数调用结束后即释放。
2, 对于静态局部变量是在编译时赋值的,即只赋初值一次,在程序运行时它已有初值,以后每次调用函数时不在重新赋值而只是保留上次函数调用结束时的值。而对于自动变量赋初值,不是在编译时进行的,而是在函数调用时进行的,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
3,如果在定义局部变量时不赋值的话,则对静态局部变量来说,编译时自动赋初值0(对于数值型变量)或空字符‘\0’(对字符变量)。而对自动变量来说,它的值是一个不确定的值。当然也可能是0,这是由于每次函数调用结束后储存单元已释放,下次调用时又重新另分配储存单元,而所分配的的单元中的内容是不可知的。
4,虽然静态局部变量在函数调用结束后任然存在,但其他函数是不能引用它的,因为他是局部变量,只能被本函数引用,而不能被其他函数引用。
总结:
- 记忆性
- 仅在本函数中使用
有什么不足的地方欢迎各位大佬指正
操作系统:Windows10
软件:Devc++
编译器:TDM-GCC 4.9.2 64-bit Release
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!