全局变量和局部变量

 在C中这两者是我们最常用的的,有时需要用全局变量来使函数中的变量不至于那么乱 ,用以减少函数实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗(全局变量全部存放在静态存储区中),用局部变量来节省系统资源,在这里来总结一下,以便以后搞混时翻开看看。

局部变量:

在一个函数内部定义的变量时内部变量,它只在本函数范围内有效,以外是不能使用这些变量的。


float add(int a)
{
        int b,c;
        .
        .
        .
}
char sub(int x,int y)
{
        int i,j;
        .
        .
        .
}
~


注:(1)主函数中定义的变量也属于局部变量,也不能使用其他函数中第一的;

(2)不同的函数中可以使用相同的变量名,互不干扰,且形参也属于局部变量;

全局变量:

在函数外部定义的变量称为全局变量,可以为本函数中的其他函数所公用,范围是从文件中定义的位置到本文件的结束。


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

可知外部变量被“屏蔽”了;

在划分时要求模块内尽量紧凑,与其他程序耦合性弱,模块的功能要单一,除了可以通过实参——形参的渠道外,没有其他联系,这样程序的移至性强。