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,虽然静态局部变量在函数调用结束后任然存在,但其他函数是不能引用它的,因为他是局部变量,只能被本函数引用,而不能被其他函数引用。

总结:

  1. 记忆性
  2. 仅在本函数中使用

有什么不足的地方欢迎各位大佬指正

操作系统:Windows10

软件:Devc++

编译器:TDM-GCC 4.9.2 64-bit Release

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中有四种类型的变量:局部变量、全局变量、静态局部变量静态全局变量。 1. 局部变量(Local Variables): 局部变量是在函数内部声明的变量,它们只在函数内部可见和访问。局部变量的作用域仅限于声明它们的函数内部。当函数执行完毕后,局部变量会被销毁,其占用的内存也会被释放。 2. 全局变量(Global Variables): 全局变量是在函数外部声明的变量,它们可以被程序中的所有函数访问。全局变量的作用域从声明开始的地方一直延伸到文件的末尾。全局变量在整个程序的执行过程中都是存在的,因此会占用内存。需要注意的是,在多个文件中使用同名的全局变量会导致冲突,因此应该避免这样的情况发生。 3. 静态局部变量Static Local Variables): 静态局部变量与普通局部变量相似,都是在函数内部声明。不同之处在于,静态局部变量只会在首次进入该函数时进行初始化,之后的函数调用不会重新初始化该变量。同时,静态局部变量的作用域仍然限制在声明它们的函数内部,但是其生命周期会延长到整个程序的执行过程。 4. 静态全局变量(Static Global Variables): 静态全局变量与普通全局变量相似,都是在函数外部声明。不同之处在于,静态全局变量只能在声明它们的文件内部访问,其作用域被限制在当前文件范围内。其他文件无法访问该变量。静态全局变量会在程序开始执行时进行初始化,并且在整个程序执行期间都存在。 以上就是C语言中四种不同类型的变量:局部变量、全局变量、静态局部变量静态全局变量的特点和用法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值