static在c语言中用于修饰变量,修饰为静态变量。
修饰局部变量
#include <stdio.h>
void test()
{
int i = 0;
i = i + 1;
printf("%d ", i);
}
int main()
{
int i = 0;
while (i < 20)
{
test();
i = i + 1;
}
return 0;
}
此代码跑出来为11111111111111111111(20个1)
原因为每当while函数返回到test时,会根据int i=0重新定义为0,之后再加1并输出。
#include <stdio.h>
void test()
{
static int i = 0;
i = i + 1;
printf("%d ", i);
}
int main()
{
int i = 0;
while (i < 20)
{
test();
i = i + 1;
}
return 0;
}
此函数经过static函数修饰为static int i = 0;,int i=0为静态变量,不在重新定义为0,因此会逐渐加1,跑出来为1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
修饰全局变量
在a,b两个不同的源文件中,
a文件中 int app=2;
b文件输出app就需要在前面输入外部声明符号 extern int app
如果在a文件中用static修饰为 static int app =2;
b文件则输出不了。app只能在a中使用。
修饰函数
在a,b两个不同的源文件中,
a中创建一个add函数。
int Add(int x, int y)
{
return x + y;
}
在b中要使用函数也要用外部声明符号。
若a中用static修饰。
static int Add(int x, int y)
{
return x + y;
}
则b不能使用add函数。
一个函数本来有外部链接属性,但是被static修饰后,变成了内部链接属性。