变量的作用域
变量能够被访问的位置称为变量的作用域。
分为:
局部变量
全局变量
局部变量
在一个函数内部定义的变量称为内部变量,它只能在本函数内部使用,而不能在函数以外的地方使用。
即它的作用范围只在函数内部。
局部变量主要包括:
自定义的局部变量
形参
复合语句中定义的变量
#include <stdio.h>
void f1(int a)
{ int b=3,c=4; //a,b,c为局部变量,只能在f1()中引用
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
void f2(int x)
{ int y=3,z=4; //x,y,z为局部变量,只能在f2()中引用
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
void f3(int a) //函数的形参int a可以与f1()的形参相同
{ int b=8,c=9; //b,c与f1()中的变量名相同,但并不相互干扰
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
void main()
{ int m=2,n=3; //m,n为局部变量,只在main()内部有效
f1(3); f2(4); f3(5);
printf("m=%d,n=%d\n",m,n);
{ int a=4,b=5; //a,b为局部变量,仅能用于本复合语句
printf("a=%d,b=%d\n",a,b);
}
//printf("a=%d,b=%d\n",a,b);
//报错,不能引用a,b
}

全局变量
在一个源程序文件中,在函数外部定义的变量为外部变量,也称为全局变量
全局变量可以被本文件中的函数使用,它的作用范围是从定义的位置开始直到本源文件结束。
可以使用全局变量作为函数之间传递数据的桥梁,在全局变量作用域内,任何函数都能引用该全局变量,所以可以让全局变量在函数之间传递数据。
#include <stdio.h>
int m=1,n=2; //m、n为全局变量,作用域直到最后
void f1()
{ printf("m=%d,n=%d\n",m,n); //全局变量m=1,n=2
printf("p=%d,q=%d\n",p,q);
//出错,不能引用后边定义的p,q
}
int p=9,q=10; //p、q为全局变量,作用域直到最后
void f2()
{ int m=3,n=4;
printf("m=%d,n=%d\n",m,n);
//引用局部变量m=3,n=4
printf("p=%d,q=%d\n",p,q);//全局变量p=9,q=10
}
void main()
{ int m=5,n=6;
printf("m=%d,n=%d\n",m,n);//引用局部变量m=5,n=6
{ int m=7,n=8;
printf("m=%d,n=%d\n",m,n);
//引用局部变量m=7,n=8
}
printf("m=%d,n=%d\n",m,n); //引用局部变量m=5,n=6
printf("p=%d,q=%d\n",p,q); //全局变量p=9,q=10
} 
说明:
(1)全局变量在程序执行的整个过程中都占用内存,而不是仅在需要时才开辟内存单元。
(2)在编写程序时,应该尽量避免使用全局变量。
因为如果函数过于依赖全局变量,函数的通用性就会降低。
所有函数都可以改变全局变量的值,因此难以判断每个瞬间变量的值。
另外,全局变量过多,也会降低程序的可读性。

