人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

C語言入門者基礎講座 第10講 函數(4)

C語言入門者基礎講座 第10講 函數(4)

更新時間:2022-07-16 文章作者:未知 信息來源:網絡 閱讀次數:

變量的作用域

  在討論函數的形參變量時曾經提到, 形參變量只在被調用期間才分配內存單元,調用結束立即釋放。 這一點表明形參變量只有在函數內才是有效的, 離開該函數就不能再使用了。這種變量有效性的范圍稱變量的作用域。不僅對于形參變量, C語言中所有的量都有自己的作用域。變量說明的方式不同,其作用域也不同。 C語言中的變量,按作用域范圍可分為兩種, 即局部變量和全局變量。

  一、局部變量

  局部變量也稱為內部變量。局部變量是在函數內作定義說明的。其作用域僅限于函數內, 離開該函數后再使用這種變量是非法的。

  例如:

  int f1(int a) /*函數f1*/
  {
  int b,c;
  ……
  }a,b,c作用域
  int f2(int x) /*函數f2*/
  {
  int y,z;
  }x,y,z作用域
  main()
  {
  int m,n;
  }

  m,n作用域 在函數f1內定義了三個變量,a為形參,b,c為一般變量。在 f1的范圍內a,b,c有效,或者說a,b,c變量的作用域限于f1內。同理,x,y,z的作用域限于f2內。 m,n的作用域限于main函數內。關于局部變量的作用域還要說明以下幾點:

  1. 主函數中定義的變量也只能在主函數中使用,不能在其它函數中使用。同時,主函數中也不能使用其它函數中定義的變量。因為主函數也是一個函數,它與其它函數是平行關系。這一點是與其它語言不同的,應予以注意。

  2. 形參變量是屬于被調函數的局部變量,實參變量是屬于主調函數的局部變量。

  3. 允許在不同的函數中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不干擾,也不會發生混淆。如在例5.3 中,形參和實參的變量名都為n,是完全允許的。4. 在復合語句中也可定義變量,其作用域只在復合語句范圍內。例如:

  main()
  {
  int s,a;
  ……
  {
  int b;
  s=a+b;
  ……b作用域
  }
  ……s,a作用域
  }[例5.11]main()
  {
  int i=2,j=3,k;
  k=i+j;
  {
  int k=8;
  if(i==3) printf("%d\n",k);
  }
  printf("%d\n%d\n",i,k);
  }
  main()
  {
  int i=2,j=3,k;
  k=i+j;
  {
  int k=8;
  if(i=3) printf("%d\n",k);
  }
  printf("%d\n%d\n",i,k);
  }


  本程序在main中定義了i,j,k三個變量,其中k未賦初值。 而在復合語句內又定義了一個變量k,并賦初值為8。應該注意這兩個k不是同一個變量。在復合語句外由main定義的k起作用,而在復合語句內則由在復合語句內定義的k起作用。因此程序第4行的k為main所定義,其值應為5。第7行輸出k值,該行在復合語句內,由復合語句內定義的k起作用,其初值為8,故輸出值為8,第9行輸出i,k值。i是在整個程序中有效的,第7行對i賦值為3,故以輸出也為3。而第9行已在復合語句之外,輸出的k應為main所定義的k,此k值由第4 行已獲得為5,故輸出也為5。

  二、全局變量

  全局變量也稱為外部變量,它是在函數外部定義的變量。 它不屬于哪一個函數,它屬于一個源程序文件。其作用域是整個源程序。在函數中使用全局變量,一般應作全局變量說明。 只有在函數內經過說明的全局變量才能使用。全局變量的說明符為extern。 但在一個函數之前定義的全局變量,在該函數內使用可不再加以說明。 例如:

  int a,b; /*外部變量*/
  void f1() /*函數f1*/
  {
  ……
  }
  float x,y; /*外部變量*/
  int fz() /*函數fz*/
  {
  ……
  }
  main() /*主函數*/
  {
  ……
  }/*全局變量x,y作用域 全局變量a,b作用域*/

  從上例可以看出a、b、x、y 都是在函數外部定義的外部變量,都是全局變量。但x,y 定義在函數f1之后,而在f1內又無對x,y的說明,所以它們在f1內無效。 a,b定義在源程序最前面,因此在f1,f2及main內不加說明也可使用。

  [例5.12]輸入正方體的長寬高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("v=%d s1=%d s2=%d s3=%d\n",v,s1,s2,s3);
  }

  本程序中定義了三個外部變量s1,s2,s3, 用來存放三個面積,其作用域為整個程序。函數vs用來求正方體體積和三個面積, 函數的返回值為體積v。由主函數完成長寬高的輸入及結果輸出。由于C語言規定函數返回值只有一個, 當需要增加函數的返回數據時,用外部變量是一種很好的方式。本例中,如不使用外部變量, 在主函數中就不可能取得v,s1,s2,s3四個值。而采用了外部變量, 在函數vs中求得的s1,s2,s3值在main 中仍然有效。因此外部變量是實現函數之間數據通訊的有效手段。對于全局變量還有以下幾點說明:

  1. 對于局部變量的定義和說明,可以不加區分。而對于外部變量則不然,外部變量的定義和外部變量的說明并不是一回事。外部變量定義必須在所有的函數之外,且只能定義一次。其一般形式為: [extern] 類型說明符 變量名,變量名… 其中方括號內的extern可以省去不寫。

  例如: int a,b;

  等效于:

  extern int a,b;
  
  而外部變量說明出現在要使用該外部變量的各個函數內, 在整個程序內,可能出現多次,外部變量說明的一般形式為: extern 類型說明符 變量名,變量名,…; 外部變量在定義時就已分配了內存單元, 外部變量定義可作初始賦值,外部變量說明不能再賦初始值, 只是表明在函數內要使用某外部變量。

  2. 外部變量可加強函數模塊之間的數據聯系, 但是又使函數要依賴這些變量,因而使得函數的獨立性降低。從模塊化程序設計的觀點來看這是不利的, 因此在不必要時盡量不要使用全局變量。

[1] [2]  下一頁

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 东辽县| 绥宁县| 祁门县| 彭山县| 台前县| 美姑县| 额敏县| 和平区| 闽侯县| 阜阳市| 仙居县| 漳州市| 兰考县| 兖州市| 桑植县| 高青县| 仙居县| 前郭尔| 加查县| 江油市| 古丈县| 外汇| 宁陕县| 德兴市| 梅河口市| 北辰区| 当阳市| 囊谦县| 涡阳县| 千阳县| 洮南市| 奉新县| 清徐县| 勃利县| 涿州市| 兴和县| 林西县| 林口县| 读书| 广东省| 怀宁县|