1.普通局部变量
第一,局部变量是在{}内部定义;
第二,局部变量是在运行到定义语句的时候系统自动分配内存空间;
第三,局部变量仅仅在{}内部有效;
第四,局部变量在{}结束时内存自动收回;
第五,不同{}内部的变量名字可以相同。
#include<stdio.h>
int main(int argc,char *argv[])
{
int a=10;
{
int b=11;
a=9; //这里可以使用a变量
}
b=8; //这里会出现错误,变量b的内存已经释放了
return 0;
}
2.static局部变量
第一,编译过程中系统就自动给静态局部变量分配空间;
第二,{}运行结束时,static局部变量的内存空间不自动回收,只有当程序全部结束时,该内存空间才释放;
第三,当多次运行{}的时候,仅仅执行一次静态局部变量的初始化,但是可以多次赋值;
第四,静态局部变量初始化的时候不能用变量,只能用常数;
第五,初始化静态局部变量的时候,如果不进行赋值,默认为0,而不是随机数。
#include<stdio.h>
void fun()
{
static int a=10; //初始化静态局部变量
a++;
printf("a=%d\n",a);
}
int main(int argc,char *argv[])
{
fun();
fun();
fun(); //最后打印结果:11,12,13
return 0;
}
3.普通全局变量
第一,全局变量可以跨文件使用;
第二,全局变量在所有文件中只能被定义一次;
第三,普通全局变量在不同文件或者本文件定义语句的前面使用的时候需要进行声明;
第四,普通全局变量可以进行多次声明,初始化没有赋值相当于0;
第五,普通全局变量在编译的时候就已经分配内存空间,并直到程序完全结束时才释放空间;
//main.c
#include<stdio.h>
#include"test.h"
int main()
{
printf("a=%d\n",a); //调用全局变量
return 0;
}
//a.c 定义普通全局变量
int a=10;
//test.h 定义头文件进行声明
extern int a;
4.static全局变量
第一,静态全局变量不能够跨文件使用;
第二,同一个静态全局变量一个文件只能定义一次;
第三,静态全局变量不可以用extern进行声明。
#include<stdio.h>
static int a=10; //定义静态全局变量
int main()
{
printf("a=%d\n",a);
return 0;
}