局部變量

  • 2017-08-30
  • 73

西安做網站 局部變量

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

例如:

    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函數內。關於局部變量的作用域還要說明以下幾點:

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

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

允許在不同的函數中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不幹擾,也不會發生混淆。如在前例中,形參和實參的變量名都為n,是完全允許的。

在複合語句中也可定義變量,其作用域隻在複合語句範圍內。

例如:

    main()

    {

  int s,a;

  ……

{

  int b;

  s=a+b;

  ……                 /*b作用域*/

}

    ……                   /*s,a作用域*/

}

【例8.12】

main()

{

    int i=2,j=3,k;

    k=i+j;

    {

      int k=8;

      printf("%d\n",k);

    }

    printf("%d\n",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。西安做網站