当前位置:文章写作网 >日记 >日记 >c语言之static

c语言之static

2008-06-24 15:39 作者:tshfang 阅读量:3030 推荐7次 | 我要投稿

static是函数或者文件中的永久变量。

static分为static局部变量和static全局变量。

两者的区别主要是在可见性,static局部变量只是在其被声明的代码块中可见。

1、static局部变量

static局部变量可以使子程序多次调用之间保持局部变量值。

例如:

int fun(void);

int main(void)

{

int x;

x=fun();

printf(" First transfer function a is %d\n",x);

x=fun();

printf(" Second transfer function a is %d\n",x);

x=fun();

printf(" Third transfer function a is %d\n",x);

getch();

return 0;

}

int fun(void)

{

int a=0;

a+=100;

return a;

}

程序结果为:

First transfer function a is 100

Second transfer function a is 100

Third transfer function a is 100

那么我们稍稍做下修改,将fun中的a定义成static int

fun函数如下:

int fun(void)

{

static int a=0;

a+=100;

return a;

}

程序执行结果:

First transfer function a is 100

Second transfer function a is 200

Third transfer function a is 300

对比两个函数我们可以发现,普通局部变量是进入函数是产生,退出函数时候消亡,static局部变量

使子程序多次调用之间保持局部变量值。也就是说当第一次调用后,a的值是100,第二次调用a的初始值不是

0而是100。

2、static全局变量

static全局变量在定义该变量的文件中可见,其它功能和static局部变量相同。其它文件中的子程序无法访问和修改,可以参照上篇的文章

和extern的第二个功能做一下比较。

例如:

static int a;

int fun(void);

void fun2(int y);

int main(void)

{

int x;

fun2(100);

x=fun();

printf(" First transfer function a is %d\n",x);

x=fun();

printf(" Second transfer function a is %d\n",x);

x=fun();

printf(" Third transfer function a is %d\n",x);

getch();

return 0;

}

int fun(void)

{

a+=100;

return a;

}

void fun2(int y)

{

a=y;

}

程序结果为:

First transfer function a is 200

Second transfer function a is 300

Third transfer function a is 400

其效果和static局部变量一样,只不过是在整个文件中可见。

fun可以访问,fun2可以访问。而在第一个例子中只能是在fun中可见。

其他人在看啥

    《c语言之static》的评论 (共 0 条)

    • Guest::peifu
    • Guest::ding