1、局部变量
在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用他们,在此函数以外是不能使用这些变量的。这称为“局部变量”。
例:float f1(int a)/*函数f1*/
{
int b,c; /*a,b,c有效*/
}
char f2(int x,int y) /*函数f2*/
{
int i, j; /*x,y,i,j有效*/
}
说明:(1)主函数定义的变量也只在主函数中有效,主函数也不能使用其他函数中定义的变量。
(2)不同函数中可以使用相同函数的变量,它们代表不同的对象,互不干扰。
(3)形式参数也是局部变量。
(4)在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。
例:
#include <stdafx.h> #include<stdio.h> void main() { int a,b; { int c; c=a+b; } }
2、全局变量
在函数内定义的变量是局部变量,而在函数外定义的变量称为外部变量,外部变量是全局变量(也称全程变量)。
全局变量可以为本文件中其他函数所共用。它的有效范围从定义变量的位置开始到本文件结束。
例:
#include <stdafx.h> #include<stdio.h> int p=1,q=5; /*外部变量*/ float f1(int a) /*定义函数f1*/ { int b,c; } char c1,c2; /*外部变量*/ char f2(int x,int y) /*定义函数f2*/ { int i,j; } void main() /*主函数*/ { int m,n; }
例:输入正方体的长宽高l,w,h。求体积及三个面的面积。
#include <stdafx.h> #include<stdio.h> 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); } void main() { int v,l,w,h; printf(" input l,w,h "); scanf("%d%d%d",&l,&w,&h); v=vs(l,w,h); printf(" v=%d,s1=%d,s2=%d,s3=%d ",v,s1,s2,s3); }
例:有一个一维数组,内放十个学生成绩,写一个函数,求出平均分,最高分和最低分。
#include <stdafx.h> #include<stdio.h> float max=0,min=0; void main() { float average(float array[],int n); float ave,score [10]; int i; for(i=0;i<10;i++) { scanf("%f",&score[i]); } ave=average(score,10); printf("max=%6f min=%6f average=%6f ",max,min,ave); } float average(float array[],int n) { int i; float aver,sum=array[0]; max=min=array[0]; for(i=1;i<10;i++) { if(array[i]>max) { max=array[i]; } else if(array[i]<min) { min=array[i]; } sum+=array[i]; } aver=sum/n; return(aver); }
不建议使用全局变量:
原因:(1)全局变量在程序的全部执行过程中都占用储存单元,而不是仅在需要时才开辟单元。
(2)使用全局变量过多,会降低程序的清晰性。
(3)使函数的通用性降低了。