static的用法及其与auto的区别小结

1.static静态全局变量
它储存在全局数据区,每次只初始化一次,等程序结束时方才释放内存。
例如:
#include<stdio.h>
int main( )
static int i=0;
{
int c,k=0;
for(k=0;k<3;k++)
{
int c;
c=++i;
printf("%d",c);
}
return 0;
}
输出结果就是 :
1
2
3
此时相较于auto变量
例如:
#include<stdio.h>
int main( )
int i=0;
{
int c,k=0;
for(k=0;k<3;k++)
{
int c;
c=++i;
printf("%d",c);
}
输出结果就是 :
1
2
3
输出结果相同,那是因为static全局变量与auto全局变量在语句中都是储存上一个值的,具有记忆功能。
2.静态局部变量
普通的局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。
例如:
#include<stdio.h>
int main( )
{
void c( );
c();
c();
c();
return 0;
}
c( )
{
static int i=0;
i++;
printf("%d",i);
}
输出结果:
1
2
3
可见静态局部变量也是只初始化一次,以后每次去调用函数都是使用上次储存的那个值。
相较于 auto变量
例如:
#include<stdio.h>
int main( )
{
void c( );
c();
c();
c();
return 0;
}
c( )
{
int i=0;
i++;
printf("%d",i);
}
输出结果则就是:
1
1
1
auto变量则是每次调用一次函数重新对相应的变量初始化一次,所以每次调用函数之后输出的值都一样。

猜你喜欢

转载自blog.csdn.net/qq_42579119/article/details/84348284