Static 变量放在函数内外的区别是:静态变量只有名列前茅次运行函数的时候被创建,并且在函数结束的时候不会消亡;而普通的成员在函数结束的时候就会在内存中退栈消亡。
一、Static 变量放在函数内外的区别
区别就是静态变量只有名列前茅次运行函数的时候被创建,并且在函数结束的时候不会消亡;而普通的成员在函数结束的时候就会在内存中退栈消亡。
说了那么多,举个例子:
//Ex_1.c
void fun_1 ()
{
static int a = 0;
a ++;
printf (“%d”, a);
}
void fun_2 (int times)
{
int i = 0;
for (;i < times; i++)
{
fun_1 ();
}
}
之后再执行fun_2的话,就会依次打印:12345….直到times;
如果去掉static关键字,执行fun_2,屏幕就会打印111111…次数为times次;
下面举例说明一下函数外的:
//H.h
#ifndef _H_H_
#define _H_H_
static int a = 0;
#endif
//Ex_2.c
#include “H.h”
void fun_ex2 ()
{
a++;
printf (“%d”, a);//这时会打印1
}
//Ex_3
#include “H.h”
void fun_ex3 ()
{
printf (“%d”, a);//这时打印的依然是0,即便先被Ex_2中的fun_ex2()函数修改过,因为他们
//是两个独立的副本
}
延伸阅读:
二、static 函数 与 普通函数的区别
用static修饰的函数 本限定在 本源文件中 不能被本源码文件以外的代码文件调用
而普通函数,默认是extern 的,也就是说,可以被其他代码文件调用该函数
在函数的返回类型前 加上static ,函数就被定义成为静态函数。
普通函数的定义和声明默认情况下是 extern的,但静态函数只是在声明它的文件中可见,因此可以避免在其他源文件中引起错误,
从以上分析可以看出,把局部变量改变为静态变量后是改变了他的存储方式即改变了他的生存期。
只在当前源文件中使用的函数应该说明为内部函数,内部函数应该在当前源文件中说明和定义。
对于在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。