全局变量2(静态本地变量)

#include <stdio.h>
int p();
int main() {
	p();
	p();
	p();
}
int p()
{
	int all=0;
	printf("in %s all=%d\n",__func__,all);
	all+=2;
	printf("again in %s all=%d\n",__func__,all);
}
in p all=0
again in p all=2
in p all=0
again in p all=2
in p all=0
again in p all=2

--------------------------------
Process exited after 0.04492 seconds with return value 0
请按任意键继续. . .

首先通过这个问题引入,

接下来在p函数中改变all为static(静态) int,

#include <stdio.h>
int p();
int main() {
	p();
	p();
	p();
}
int p()
{
	static int all=0;
	printf("in %s all=%d\n",__func__,all);
	all+=2;
	printf("again in %s all=%d\n",__func__,all);
}
in p all=0
again in p all=2
in p all=2
again in p all=4
in p all=4
again in p all=6

--------------------------------
Process exited after 0.04507 seconds with return value 0
请按任意键继续. . .

会发现每次重现调用p函数all的值是上次离开函数的那个值,这时候肯定有人疑惑,我直接定义一个全局变量不就行了,这个静态本地变量实际上是特殊的全局变量。接着看下面的程序-----

#include <stdio.h>
int gall;
int p();
int main() {
	p();
}
int p()
{
	int a;
	static int all=0;
	printf("%p\n",&a);
	printf("%p\n",&all);
	printf("%p\n",&gall);
}
000000000062FDEC
0000000000407034
0000000000407030

--------------------------------
Process exited after 0.03902 seconds with return value 0
请按任意键继续. . .

 这时候会发现静态本地变量all和全局变量gall地址上是紧挨着的,验证了上面的话。

但是特殊的含义就是静态本地变量只能在当前函数中使用。所以是特殊的全局变量。

 所以总有需要它出现的时候,只是现在还未知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值