局部变量

  • 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。西安做网站