概述
static的用法可总结为三点。
1,static修饰局部变量。
2,static修饰全局变量。
3,static修饰函数。
本文就static在c语言中的应用进行总结,供参考使用。错漏之处,请不吝指正。
1,static修饰局部变量
先给大家看一个程序。
#include<stdio.h>
void fun()
{
int a = 1;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
while (i < 10)
{
fun();
i++;
}
return 0;
}
这段代码的执行结果是:
原因:主函数中fun函数被调用十次,由于a是局部变量,进fun函数时a被创建,出函数时a被销毁。每次进入fun函数时a都要被重新创建,以此类推,就打印10个2的结果。
当用static修饰fun函数的局部变量a变量时。
void fun()
{
static int a = 1;
a++;
printf("%d ", a);
}
此时的打印结果如下:
原因:static修饰局部变量a,使a创建一次,不再被销毁。static改变了局部变量a的生命周期,使它的生命周期变长,但是不改变它的作用域。 这就是static的第一个用法。
意义:在定义不需要与其他文件共享的全局变量时,加上static关键字能够有效地降低程序模块之间的耦合,避免不同文件同名变量的冲突,且不会误使用。
对变量的生命周期不太了解的小伙伴请看这篇文章(变量的作用域和生命周期)
2, static修饰全局变量
在add.c文件定义全局变量,在text.c文件中使用,编译不通过。当用extern声明过后程序能正常运行:
当用static修饰全局变量后:
全局变量是具有外部链接属性的,其他源文件可以通过链接使用,被static修饰的全局变量后,只能在自己的源文件内部使用。出了源文件就无法链接到。static将全局变量的外部链接属性改成了内部链接属性。
3,static修饰函数
static修饰函数和修饰全局变量类似,改变了函数的链接属性,使得函数的外部链接属性变成了内部链接属性,被修饰的函数只能在自己的源文件内部使用。
当用extern修饰另一个.c文件的函数是,程序运行成功:
当用static修饰外部函数时: