浅谈局部变量和全局变量

                                                               浅谈局部变量和全局变量

问题引入:当一个程序中出现多个函数时,函数中有许多变量,那么这些变量的作用范围有多大呢?也就是说什么时候这些变量仍起作用,什么时候这些变量不起作用呢? 我们根据其起作用的范围,将变量分为局部变量和全局变量。                                         

局部变量:

 

概念:C语言函数内部或者复合语句内部声明的变量称为局部变量。                                                                                                        

作用域: 【1】函数内部-----从声明该变量的代码开始一直到所在函数体的末尾 ,存储单元是在包含该变量的函数被调用时自动分配,函数返回时收回分配。                                                                                                                                                                                                

                【2】复合语句----- 从声明该变量的代码开始一直到该复合语句的末尾 ,存储单元是执行该复合语句时自动分配,复合语句结束时收回分配。

总结:局部变量具有自动的存储期限。

//函数中的局部变量
#include<stdio.h>
void swap(int a, int b);

int main(void)
{
   int a, b;
   scanf("%d%d",&a,&b);
   swap(a, b);
   printf("main函数中:a=%d, b=%d\n", a,b);
   return 0;
}
/*交换两个整数的值*/
void swap(int a, int b)
{
   int t;
   t = a; a = b; b = t;//交换的时swap函数中局部变量a,b的值
   printf("swap函数中:a=%d, b=%d\n", a,b);
}

  程序输出如下:              swap函数中: a = 5, b = 3  ;main函数中: a = 3, b = 5           

  现在我们来思考为什么主函数中a,b的值并没有交换呢?         

  此程序包含两个函数,而我们知道函数内部的变量为局部变量,那么也就是说main函数中的变量a,b为main函数中的局部变量。swap函数中的变量a,b为swap中的局部变量。我们把swap中的a,b暂且叫做a1,a2以示区别main函数中的局部变量。

我们知道程序先进行main函数,main函数中声明a,b时为其分配内存空间,当main函数中的程序调用swap函数时进入swap函数并为形参a1,b1分配内存空间,当swap函数结束时,形参a1,b1所占的内存被释放。然后返回main函数,直到main函数结束a,b所占的内存才被释放。

代码说明:  【1】main函数中定义的局部变量,只能在main函数中使用,其他函数不能使用。同样,main函数也不能使用其他函数定义的局部变量。因为main函数也是一个函数,与其他函数是平行关系。 【2】形参拥有局部变量一样的性质,在所定义的函数内部起作用,当每次函数调用时,自动对形式参数初始化,通过赋值获得相应实际参数的值。【3】允许不同的函数中使用相同的变量名,他们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。【4】在复合语句中也可定义变量,其作用域只在复合语句范围内部。

静态局部变量:                                                                                                                                                                                       

用static声明的局部变量具有静态存储周期,整个程序运行期间都存在于内存中,但只能在它定义的函数中被访问。                     

区别于动态变量,静态局部变量在函数执行结束后依然存在于内存中,在这个函数下一次被调用时,静态局部变量存储的是上一次这个函数执行结束时的值。定义格式:static 类型名 变量表

//静态局部变量
#include<stdio.h>
void aust(void);
int main(void)
{
   int i;
   for(i=0; i<3; i++)  //通过循环进行三次函数调用,观察变量值的变化
      aust();
   return0;
}
void aust(void)
{
   int au = 0;
   static int st = 0;

   printf("auto variable = %d, static variable = %d\n", au, st)
   au++;
   st++;
}
auto variable =  0;      static variable = 0;
auto variable =  0;      static variable = 1;
auto variable =  0;      static variable = 2;

代码说明:【1】静态局部变量在函数内定义,但不像局部变量那样,执行函数时存在,退出函数时消失。静态局部变量始终存在,也就是他的生存期为整个源程序。【2】作用域与局部变量相同,即只能在定义该变量的函数内使用变量。退出该变量后,尽管变量还继续存在,但不能使用它。【3】对基本静态局部变量未赋初值,系统为其赋值0;

 

问题引入:试想如果有一个变量,这个变量独立于每个函数,那么这个变量在整个程序运行期间都起作用,它可以被所有函数所引用。      为了解决多个函数共用变量的问题,C语言允许定义外部变量。                                                                                                                        

 概念:定义在函数外而不属于任意函数的变量称为外部变量。                                                                                                                  

 

作用范围:从定义开始到程序所在文件结束,它对作用范围内所有函数都起作用。一般情况下把外部变量定义在程序的最前面,即第一个函数的前面。

 

//外部变量的使用,验证外部变量的作用
#include<stdio.h>
void swap(void)
int a, b; //外部变量,从本行开始到程序所在文件结束都起作用
int main(void)
{
   a = 3, b = 5;
   swap();
   printf("main函数中a=%d,b=%d\n",a,b);
   return 0;
}
void swap(void)
{
  int t;
  t = a; a = b; b = t;
  printf("swap函数中:a = %d, b = %d\n",a,b);
}

函数运行结果:a = 5, b = 3;

注:在同一源文件中,允许外部变量和局部变量同名。上述程序,main函数和swap函数均可访问外部变量a,b;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

          

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值