1.函数内局部变量,这个变量在该函数结束后自动撤销
2.函数内的复合语句中的局部变量(比如for语句),这个变量在复合语句结束后自动撤销,这个变量可以与1中的变量重名,在复合语句作用域中里面定义的变量权限更高,考虑到可读性不推荐这么做
例如:
#include<stdio.h> #include<stdlib.h> void fun1(); int main() { fun1(); } void fun1() { int m=200; int i=0; for(i=0;i<1;i++) { int m=5; printf("%d",m); } printf("%d\n",m); system("pause"); } //输出结果为:5 200
定义在所有函数外部的变量,需要注意和区分的是变量的定义和声明,只要在所有函数外面定义的变量就是全局变量 ,所以这个变量不一定在一个文件的最前面几行代码,如果这个变量定义在一个函数的后面,而这个函数需要用到这个变量,那么这个变量就需在这个函数之前声明或者在这个函数内部声明方可使用,如果这个变量定在这个函数的前面,那么可以省去声明,
定义一个变量的一般形式:extern 类型说明符 变量名 (比如:int a ,在定义的时候extern可以省略,)
声明一个变量的一般形式:extern 类型说明符 变量名 (声明变量时extern不可以省略,)
需要注意的是 静态全局变量 和非静态全局变量(全局变量)
一个程序往往有很多源代码,一个源文件中包含了另外一个源代码文件,
总结来说就是:全局变量在所有包含了它的源文件中均有效,而静态全局变量只有在定义它的源文件中有效,
总结论:把局部变量改为静态变量后改变了它的储存方式,即改变了它的生存周期;把全局变量改为静态变量后改变了它的作用域,限制了它的使用范围
原文:http://blog.csdn.net/jiecooner/article/details/30253647