static作用:修饰变量和函数
修饰局部变量-静态局部变量
static未修饰局部变量
#include <stdio.h>
void print()
{
int a = 0;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
print();
}
return 0;
}
运行结果
static修饰局部变量
#include <stdio.h>
void print()
{
static int a = 0;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
print();
}
return 0;
}
运行结果
原因分析:
static修饰局部变量的时候,局部变量出了作用域,不销毁,本质上static修饰局部变量的时候,改变了变量存储的位置,进而使变量的生命周期变长,与程序的生命周期一致
修饰全局变量-静态全局变量
static未修饰全局变量
test.c中代码
#include <stdio.h>
extern int global_tmp;
int main()
{
printf("%d", global_tmp);
return 0;
}
tmp.c中
int global_tmp = 100;
运行结果
static修饰全局变量
报错
原因分析:
全局变量具有外部链接属性,当static修饰全局变量,全局变量的外部链接属性变成了内部链接属性,其他源文件(.c)文件就不能使用这个全局变量
修饰函数-静态函数
static未修饰函数
test.c代码
#include <stdio.h>
extern int Add(int x, int y);
int main()
{
printf("%d", Add(1, 1));
return 0;
}
tmp.c代码
int Add(int x, int y)
{
return x + y;
}
运行结果
static修饰函数
原因分析
函数是具有外部链接属性,但是被static修饰的时候,外部链接属性变为内部链接属性,其他源文件(.c)文件就不能使用这个函数