區域性變數與全域性變數
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("\n input l,w,h\n"); scanf("%d%d%d",&l,&w,&h); v=vs(l,w,h); printf("\n v=%d,s1=%d,s2=%d,s3=%d\n",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\nmin=%6f\naverage=%6f\n",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)使函式的通用性降低了。