全局变量和局部变量
在C中这两者是我们最常用的的,有时需要用全局变量来使函数中的变量不至于那么乱 ,用以减少函数实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗(全局变量全部存放在静态存储区中),用局部变量来节省系统资源,在这里来总结一下,以便以后搞混时翻开看看。
局部变量:
在一个函数内部定义的变量时内部变量,它只在本函数范围内有效,以外是不能使用这些变量的。
float add(int a)
{
int b,c;
.
.
.
}
char sub(int x,int y)
{
int i,j;
.
.
.
}
~
注:(1)主函数中定义的变量也属于局部变量,也不能使用其他函数中第一的;
(2)不同的函数中可以使用相同的变量名,互不干扰,且形参也属于局部变量;
(3)在函数内部中的复合语句中定义的变量只能在复合语句中使用。
全局变量:
在函数外部定义的变量称为全局变量,可以为本函数中的其他函数所公用,范围是从文件中定义的位置到本文件的结束。
int sum,average;
char add(int a)
{
int b,c;
.
.
.
}
char sub(int x,int y)
{
int i,j;
.
if(i<0){
char s,t;
.
.
}
.
}
注:全局变量的作用只是增加函数间的数据联系,相当于在各个函数间有了直接的传递通道;
如:
#include <stdio.h>
float Max=0,Min=0;
float average(float array[10])
{
int i;
float aver,sum=array[0];
Min=Max=array[0];
for(i=0;i<10;i++){
if(array[i]>Max)
Max=array[i];
else if(array[i]<Min)
Min=array[i];
sum=sum+array[i];
}
aver=sum/10;
return aver;
}
void main()
{
int i;
float aver,socer[10];
printf("please input 10 score:\n");
for(i=0;i<10;i++)
scanf("%f",&socer[i]);
printf("\n");
aver=average(socer);
printf("Max is %5.2f\nMin is %5.2f\naverage socer is %5.2f\n",Max,Min,\
aver);
}
通过以上函数可以明确局部变量和全局变量的应用。
使用全局变量的弊端:全局变量在执行过程中都占用存储单元,而不仅仅是需要时,由此可看出它对内存的浪费;
它是函数的通用性降低了,是函数执行时要依赖于其所在的外部变量;
当函数中的局部变量和全局变量中的变量名相同时,就会出现问题,如以下代码
#include <stdio.h>
int a=8,b=4;
void main ()
{ int max(int x,int y);
int a,b,c;
a=5,b=3;
c=max(a,b);
printf("max is %d",c);
}
int max(int x,int y)
{ int z;
return ( z=x>y? x: y);
}
结果如下:
max is 5
可知外部变量被“屏蔽”了;
在划分时要求模块内尽量紧凑,与其他程序耦合性弱,模块的功能要单一,除了可以通过实参——形参的渠道外,没有其他联系,这样程序的移至性强。