变量仅在创建区域内可用。 这称为作用域(scope)。本主主要介绍一下C语言中的作用域(scope)。

1、局部变量

定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。

例如,

#include <stdio.h>
int 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 文件。

例如,

#include <stdio.h>
int 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)静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。

推荐文档