内经过说明的全局变量才能使用。全局变量的说明符为 extern。但在一个函数
之前定义的全局变量,在该函数内使用可不再加以说明。
例如:
int a,b; /*外部变量*/
void f1() /*函数 f1*/
{
……
}
float x,y; /*外部变量*/
int fz() /*函数 fz*/
{
……
}
main() /*主函数*/
{
……
}
谭浩强 C 语言程序设计 2001 年 5 月 1 日
从上例可以看出 a、b、x、y 都是在函数外部定义的外部变量,都是全局变量。但 x,y 定
义在函数 f1 之后,而在 f1 内又无对 x,y 的说明,所以它们在 f1 内无效。a,b 定义在源程
序最前面,因此在 f1,f2 及 main 内不加说明也可使用。(奇-书-网)
【例 8.13】输入正方体的长宽高 l,w,h。求体积及三个面 x*y,x*z,y*z 的面积。
int s1,s2,s3;
int vs( int a,int b,int c)
{
int v;
v=a*b*c;
s1=a*b;
s2=b*c;
s3=a*c;
return v;
}
main()
{
int v,l,w,h;
printf("\ninput length,width and height\n");
scanf("%d%d%d",&l,&w,&h);
v=vs(l,w,h);
printf("\nv=%d,s1=%d,s2=%d,s3=%d\n",v,s1,s2,s3);
}
【例 8.14】外部变量与局部变量同名。
int a=3,b=5; /*a,b 为外部变量*/
max(int a,int b) /*a,b 为外部变量*/
{int c;
c=a>b?a:b;
return(c);
}
main()
{int a=8;
printf("%d\n",max(a,b));
}
谭浩强 C 语言程序设计 2001 年 5 月 1 日
如果同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变
量被“屏蔽”,即它不起作用。
8.9 变量的存储类别
8.9.1 动态存储方式与静态动态存储方式
前面已经介绍了,从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变
量。
从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式