1、局部变量
定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。
例如,
#includeint fn(int a){ int b,c; //a,b,c仅在函数fn()内有效 return a+b+c;}int main(){ int m,n; //m,n仅在函数main()内有效 return 0;}
2、全局变量
在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c
和 .h
文件。
例如,
#includeint a, b=3; //全局变量void fn(){ printf("%d\n %d\n",a,b);}int main(){ fn(); printf("%d\n %d\n",a,b); return 0;}
3、局部变量与全局变量的区别
1)局部变量是声明在块或者函数内部的变量。局部变量的作用域局限于该块或者函数。局部变量如果没有初始化,将包含垃圾数据。
2)全局变量是在所有块和函数之前声明的变量。全局变量对所有在它之后声明的函数有效。全局变量有默认值初始化,如0
。
注意:如果要调用另外一个文件中的全局变量,如果再声明一个同名的全局变量,那么编译器会因为重名报错,这个时候就要使用extern变量。extern
声明告诉编译器这个变量的定义在其他文件中,所以并不会为它分配内存。
4、静态局部变量和静态全局变量区别
1)非静态全局变量的作用域是整个源程序 ,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
2)静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。