1、static:声明静态变量
声明局部变量,静态局部变量的特点:
(1)声明时未赋初值,编译器会自动赋值为0,而普通变量则是不确定的;
(2)静态变量在全局数据区分配内存,即使函数返回,静态变量的数值也是保持不变。
#include<stdio.h>
int c =9;
int d;
void static_test(void)
{ static int a = 0;//静态变量,如果不赋初值,编译器会初始化它为0
int b = 0;//普通变量
a++;
b++;
printf("a = %d\nb = %d\n",a,b);
}
int main()
{ static_test();//第一次调用函数,a和b的数值都是1
printf("\n");
static_test();//第二次调用就发现,a的数值保持了上次函数执行后的数值,而b没有
printf("\n");
static_test();//再次调用验证
return 0;
}
执行的结果:
2、const:声明只读变量
有了const的修饰的变量只能读不能修改。
#include<stdio.h>
int main()
{ int a = 0;//普通变量
a++;//自加没有问题
printf("a = %d\n",a);
const int b = 0;//只读变量声明
b++;//只读变量自加要报错:只读变量不能修改
printf("b = %d\n",b);
}
执行结果:
3、extern:声明变量是在其他文件中
extern 修饰变量就是声明变量是引用其他的文件。编译的时候要将extern修饰变量所在文件和变量来源文件一起编译,再执行编译后的文件即可。如果已经从别的文件中引用变量,在本文件中修改变量的数值是无效的。
extern修饰文件(extern_test.c):
#include<stdio.h>
extern int a,b;//从下面的文件中引入a=1,b=2
extern int add(int a,int b);//从下面的文件中引入add函数
int main()
{
int c = 8;//普通变量c
printf("a = %d\nb = %d\n",a,b);//打印引用的a,b的数值
printf("add(int a,int b) = %d\n",add(3,4));//尝试修改引用函数的数值,输出结果确实3
printf("add(int a,int c) = %d\n",add(a,c));//尝试修改引用函数的数值,输出结果依然3
return 0;
}
变量来源文件(extern_test2.c):
#include<stdio.h>
int a=1,b=2;
int add(int a1,int b1)
{
a1 = a;
b1 = b;
return a1+b1;
}
执行的结果: