变量的存储类别

static int a; 静态内部整型变量or静态外部整型变量
auto char c; 自动变量
register int d; 寄存器变量
extern b; 已经被定义的外部变量
C语言中,每一个变量和函数有两个属性:数据类型和数据存储类别
存储类别:数据在内存中存储方式(静态存储和动态存储)
auto
static
register
extern
 
作用域:变量在某个文件或者某个函数范围内有效,该范围为变量的作用域
在此作用域内可以引用该变量,所以称该变量在此作用域内“可见”,这种性质称为变量的可见性
生存期:变量在某个时刻存在,这一时刻称为变量的生存期,“存在”
从变量的作用域(空间)划分:全局变量和局部变量
从变量存在的时间(生存期)划分:静态存储和动态存储
内存中供用户使用的存储空间的情况:程序区,静态存储区,动态存储区
 
静态存储:
1.在程序运行期间由系统固定地分配固定的存储空间
2.全局变量都在静态存储区,程序开始时给全局变量分配存储区,程序执行完毕就释放,
在程序执行过程中占据固定的存储单元而不是动态地进行分配和释放
 
动态存储:
1.在程序运行期间根据需要进行动态的分配存储空间
2.存放数据:
函数形式参数,调用函数时给形参分配存储空间
自动变量
函数调用时现场保护和返回地址
函数调用开始时分配动态存储空间,函数结束时释放这些空间,分配和释放时动态的
如果在一个程序中两次调用该函数,分配给此函数中局部变量的存储空间地址可能是不相同的,
 
auto(自动变量||动态局部变量)
函数中的变量,没有专门声明为static类别的
动态分配存储空间,数据存储在动态存储区,函数调用结束自动释放存储空间
例如函数中的形参和在函数中定义的变量
auto可以省略不写
 
static(静态局部变量)
函数中局部变量的数值在函数调用结束后不消失而保留原值
即占用的存储单元不消失
1.静态局部变量属于静态存储类别,在静态存储区分配存储单元,
自动变量属于动态存储类别,占用动态存储空间,函数调用后释放
2.static变量是在编译时赋初值,赋值一次即可,每次调用函数保留上次函数调用结束的数值
auto变量在函数调用赋值,每次调用一次重新赋值一次
3.定义局部变量不赋值时
static变量,自动赋值0,auto变量,不确定的数值
4.static变量在函数调用后仍然存在,但是其他函数不可以引用它
 
静态局部变量的可见性和存在性不一致,离开函数后变量数值存在,但不能被引用
其他变量的可见性和存在性一致
 
static对局部变量和全局变量的作用不同,
凡是有static声明的,其作用域都是局限的,或者局限于本函数内部,或者局限于本文件内部
对于局部变量:使得变量由动态存储方式改为静态存储方式
对于全局变量:使得变量局限于本文件
 
register变量:
局部变量的数值放在CPU中的寄存器中,需要时直接从寄存器取出参加运算不必再到内存中去取,
对寄存器的存取速度远远高于对内存的存取速度,提高执行效率
 
1.只有局部自动变量和形式参数可以作为register变量,调用一个函数时占用一些寄存器来存放寄存器变量的数值,函数调用结束后释放寄存器,此后,再调用另一个函数时又可以利用它来存放该函数的寄存器变量
2.一个计算机系统中的寄存器数目是有限的,不能定义任意多个register变量
 
 
外部变量:在函数外部定义的全局变量,作用域从变量的定义开始,到本程序文件的结尾
在此作用域内,全局变量可以为程序中各个函数引用,编译时分配在静态存储区
extern变量:从变量声明处开始,合法地使用该外部变量
 
 
      作用域 应用
  局部变量 auto 变量
自动变量
动态局部变量 离开函数,数值消失 形参
    static 变量
静态局部变量 离开函数,保留数值  
    register 变量 离开函数,数值消失 形参
按照作用域划分
(空间)        
  全局变量 静态外部变量 只在本文件内使用  
    extern 变量
外部变量 允许其他文件引用  
 
  动态存储
调用函数时临时分配单元 auto 变量
自动变量
动态局部变量 本函数内有效 形参
    register 变量 本函数内有效 形参
变量存放时间
生存期
(时间)        
  静态存储
程序整个运行时间都存在 静态局部变量 本函数内有效  
    静态外部变量 本文件内有效  
    extern 变量
外部变量 允许其他文件引用  
 
  内存中静态存储区 静态局部变量 本函数内有效  
    静态外部变量 本文件内有效  
    extern 变量
外部变量 允许其他文件引用  
变量值存放位置        
  内存中动态存储区 auto 变量
自动变量
动态局部变量   形参
         
  CPU中的寄存器 register 变量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值