局部变量与全局变量&变量的存储方式和生存周期

本文介绍了局部变量与全局变量的概念及其区别。全局变量在整个程序执行期间占用存储单元,而局部变量仅在函数调用时分配存储,并在结束后释放。此外,文章还探讨了变量的存储类别,包括静态存储和动态存储,以及C语言中的四种存储类别:auto、static、register和extern。静态局部变量在函数调用结束后仍保留其值,而全局变量的作用域可以扩展到其他文件或限制在本文件内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现实世界的数据描述

局部变量与全局变量
- 全局变量在程序的全部执行过程中都占用存储单元,而不仅在需要时开辟;
- 局部变量在调用时由所在的函数临时分配存储单元,而在函数调用结束后存储单元马上释放;

变量的存储方式和生存周期
 
从变量的作用域,变量分为全局和局部;

变量的存储有两种不同的方式:静态存储和动态存储。静态,指由系统分配固定的存储空间的方式;动态,则程序运行期间根据需要进行动态的分配。
  动态存储区域主要存放以下数据:
  1)函数形式参数,在调用函数时给形参分配存储空间;
  2)函数中没有用关键字static声明的变量,即自动变量;
  3)函数调用时的现场保护和返回地址;
  每个变量和函数都有两个属性:数据类型和数据的存储类别;
  C的存储类别包括:自动的(auto)、静态的(statis)、寄存器的(register)、外部的(extern)。根据变量的存储类别即可知变量的作用域和生存周期;

  局部变量的存储类别

  1)auto,函数的形参和函数或复合语句中定义的局部变量
  2)statis,函数的局部变量值在函数调用结束后不消失,而是继续保留原值,即占用存储单元不释放。
  静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放。
  静态局部变量是在编译时赋初值,即只赋初值一次。以后每次调用函数时不再重新赋初值而是保留上次函数调用结束时的值。自动变量赋初值是在函数调用时进行,且每次调用重新赋初值;
  静态局部函数虽然在函数调用后仍然存在,但其他函数不能引用它,仅限本函数;
  3)register,将局部变量的值放在CPU寄存器中,而不再到内存中存取;
  
  全局变量的存储类别

  全部变量生存期是固定的,存在于程序的整个运行过程,作用域是从变量定义处开始,到本程序文件的末尾。
  1)在一个文件中扩展外部变量的作用域
  如果不在文件的开头定义,则全局的作用范围限于定义处到文件结束处。如果在定义点之前的函数需要引用该外部变量,则应该在引用之前用关键字extern对变量作“外部变量声明”,即扩展外部变量的作用域到此位置。
  2)将外部变量的作用域扩展到其他文件
  在任意文件中定义外部变量,在其他文件中用extern做外部变量声明。
  3)将外部变量的作用域限制在本文件中(statis声明)
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值