Static的作用

最近比较闲,将C程序设计重新看了一遍,对static变量有了新的认识,现记录如下:

内存中供用户使用的空间有:

1、程序区

2、静态存储区

3、动态存储区

全局变量和static变量都存储在静态存储区。

以上知识我们都很清楚,但是为什么要用static呢?

下面我们来看一个例子:

#include <stdio.h>
int fun(int a)
{
	int b =0;
	static c = 3;
	b = b + 1;
	c = c + 1;
	return (a+b+c);
}
int main()
{
	int a = 2;
	for(int i = 0; i<3; i++){
		printf("%d\n" , fun(a));
	}
	return 0;
}

上面的程序,三次的输出结果分别为 7 8 9

分析可以知道,static局部变量c在后两次fun函数的时候,并没有被重新赋值为3,而是c=4 ,c=5 即上一次执行之后的值。

总结一下static的特点:

1、static局部变量属于静态存储区,在整个程序运行期间空间都不释放,哪怕其所属的那个函数已经执行完毕。

2、static局部变量是在编译的时候就赋值了的,也就是说,在程序运行的时候static局部变量已经有初值了。

3、虽然static局部变量在函数执行完毕后仍然存在与内存中,但是其他函数却不能引用它,只能被本函数引用。这也是他与全局变量唯一的不同点。

4、如果函数开始的时候不对static局部变量赋初值,那么static局部变量的初值为0 或者'\0',这与普通局部变量的不赋初值的话就为随机数不同。

5、静态全局变量,(注意,不是静态局部变量)的作用域并不是整个程序,而仅仅只是当前文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值