C语言变量作用域

  • 变量作用域
  • static关键字


变量作用域

全局变量
1)在所有函数外部定义的变量都是全局变量,作用域在整个程序都有效;所以全局变量一般都定义在头文件中;
2)全局变量有默认值,即系统会自动对其初始化:
整型:0
浮点型:0.0
字符型:’\0’ 空字符
指针:NULL
3)全局变量保存在内存的全局区,占用静态的存储单元,所以其作用域是整个程序。
局部变量
1)函数内部定义的变量是局部变量,作用域仅限于函数内部;函数形参也属于函数的局部变量;
2)局部变量没有默认值,系统不会对其初始化,所以必须对局部变量初始化后才能使用;
3)局部变量保存在栈中,函数被调用时才动态的为变量在函数栈空间中分配存储单元,所以其作用域仅限于函数内部;
总结:
a、(全局变量)函数之外,有默认值,整个程序都可以访问,要么定义在函数之外要么在头文件中;
b、(局部变量)函数内部、函数形参、函数内部的语句块,没默认值必须初始化值,只能在定义局部变量的函数内部或语句块中访问;

static关键字

1)局部变量使用static修饰
a、局部变量被static修饰后,称为局部变量;
b、静态局部变量也有默认值;
c、静态局部变量保存在内存的静态存储区(全局性质),只会被初始化一次;
2)全局变量使用static修饰
a、全局变量被static修饰后,称为静态全局变量;
b、全局变量对整个工程可见,其他文件可以使用extern外部声明直接使用,或者先将全局变量定义在头文件,其他文件通过引入头文件直接使用,也就是说其他文件不能再定义一个与之同名的全局变量了;但是静态变量是仅对当前文件可见,其他文件不可访问,所以其他文件可以定义与之同名的变量;所以一般是定义不需要与其他文件共享的全局变量时,使用静态全局变量;
3、函数使用static修饰
1)函数的使用方式和全局变量类似,函数被static修饰称为静态函数;
2)函数可以通过另一个文件通过extern引用直接使用,或者先将函数定义在头文件中,再直接引入头文件后直接使用,也就是说其他文件不能再定义一个与之同名的函数;静态函数仅对但前文件可见,其他文件不可访问,所以其他文件可以定义与之同名的函数;
总结:
1> 静态局部变量:有默认值,只会初始化一次。
2> 静态全局变量:只能在其所处的文件中被使用。
3> 静态函数:只能在其所处的文件中被使用。
4> 全局变量:整个程序可访问。a、使用extern关键字、b、先定义在头文件中,再引入头文件。
5> 函数:整个程序可访问。a、使用extern关键字、b、先定义在头文件中,再引入头文件。