前言
就C语言来讲,函数的形参是不占用内存单元的,当函数被调用后,形参被分配内存单元,函数调用结束后,形参所占用的内存被系统回收,被释放。这一点说明形参只有在定义它的函数内才是有效的,离开函数就不能再使用了。借此引出一个问题,那就是变量的有效性范围,又称为变量的作用域。
一、全局变量
1.定义
只要是在函数外面定义的变量就是全局变量。全局变量又称外部变量。
2.代码举例
// 1.c
extern d; //使用其他源文件中定义的全局变量
int first,second; //全局变量 first ,second
int fun()
{
......
printf("%d", d);
}
double a,b; //全局变量 a, b;
void fun1()
{
.....
}
全局变量的作用域是整个源程序,但是若想在源文件1.c 中使用源文件2.c定义的全局变量 d ,需要在使用前用 extern声明。
二、局部变量
1.定义
既然知道了什么是全局变量,那么剩下的变量就是局部变量了。某本书上是这样说的“局部变量就是在函数内部或者块内定义的变量”,此处块内指的是 {} 内,“局部变量只在函数内部或块内有效”。
2.代码举例
int f1(int a,b)
{
double x ,y;
}
//变量a,b,x,y 只在f1() 函数内有效
int main()
{
int m,n;
...
}
//m ,n同样也只在 main()函数内有效
{
int a,b,c;
...
{
int a;
a = b + c;
}
...
}
//尽管前面定义的a,b, c 在外层 {} 内都有效,但是本着“越靠近越优先”的原则,b + c 经运算后,会赋值给了后来内层 {} 内定义的 a .
总结
另外,当局部变量与全局变量同名时,若在局部变量的作用域内,全局变量不起作用,即局部变量优先。
期待与大家一同进步,欢迎指正!!