首先,自己定义的变量名不能与关键字冲突
static关键字
static修饰局部变量
static修饰的局部变量叫做静态局部变量
我们用代码来解释这个static这个关键字
void test()
{
int b = 1;
b++;
printf("b=%d\n",b);
}
#include <stdio.h>
int main()
{
int a = 0;
while (a < 5)
{
test();
a++;
}
return 0;
}
我们可以看到在没有static修饰的前提下,结果是5个b=2,因为局部变量的生命周期,就是在代码块内,出了代码块,变量就销毁了。
然后我们可以看下有static修饰的局部变量结果
void test()
{
static int b = 1;
b++;
printf("b=%d\n",b);
}
#include <stdio.h>
int main()
{
int a = 0;
while (a < 5)
{
test();
a++;
}
return 0;
}
可以看到b的结果由2逐级向上加1
这是因为static修饰的局部变量延长了局部变量的生命周期,局部变量出了代码块就不会销毁
static修饰全局变量
我们知道全局变量的作用域在整个项目中都能使用,即便我们定义的全局变量与我们所引用的printf函数不在一个源文件中,我们也可以用extern(是用来声明外部源文件中的全局变量的)声明一下就可以使用了。
来看一下由static修饰的全局变量结果会是什么呢?
#include <stdio.h>
int main()
{
extern int a;//extern 是用来声明外部变量的。
printf("a=%d\n",a);//结果就是2023 加入static的结果是error
//由static修饰的全局变量称为静态全局变量。缩短了全局变量的作用域,在另一个源文件中创建的静态
// 全局变量的作用域只能在所创建的源文件中。
return 0;
}
由此可见static修饰的全局变量缩短了全局变量的作用域
static修饰函数
static修饰函数改变了函数的链接属性,禁止了函数的外部链接属性
在外部源文件中的函数不能被extern声明了。