C语言中变量的存储类型

C语言中变量的存储类型:

  1. 变量的存储类型:是指存储变量值的内存类型
  2. 变量的存储类型决定了 变量何时创建、何时销毁、保持多久。
  3. 有三个地方可以存储变量:普通内存、运行时堆栈、硬件寄存器。

变量的缺省(default,同默认)存储类型时,取决于它声明的位置。

  1. 在任何代码块之外声明的变量总是存储的静态内存中,被称为静态变量,在程序运行之前创建。
  2. 在代码块内部声明的变量的缺省存储类型是自动的,存储于堆栈中,称为自动变量,auto关键字就是用于修饰这用存储类型的,但是常常被省略。

在代码块内部声明的变量加上static关键字,可以使它的存储类型由自动变为静态。注意:

  1. 修改变量的存储类型并不表示修改变量的作用域。
  2. 函数的形参不能声明为静态,因为实参总是在堆栈中传值给函数,而且形参接收的值会保存在栈中,用于支持递归。

register关键字将自动变量(全局变量是不允许的)声明为寄存器变量。

  1. 作用:提示声明的自动变量应该存储于硬件寄存器而不是内存中。
  2. 寄存器变量比存储于内存中的变量访问起来效率更高。
  3. 编译器不一定理睬register关键字,有太多的变量被声明为register,它只选前几个存储于寄存器,其余的就按普通自动变量处理。
  4. 同样,也完全有可能,这个优化措施所节省地时间和空间的开销,还抵不上赋值这几个值所用的开销。
  5. 寄存器变量的创建时间和销毁时间与寄存器变量相同,但需要一些额外的工作:在一个使用寄存器变量的函数返回之前,这些寄存器先前存储的值必须恢复,确保调用者的寄存器变量是未被破坏的(因为寄存器的空间十分有限,所以会用这种临时替换的方式)。
  6. 机器并不向你提供寄存器变量的地址。

静态变量初始化问题:

  1. 静态变量的初始化:把可执行程序文件想要初始化的值,放在当程序执行时变量会使用的位置。

自动变量的初始化:

  1. 自动变量的初始化较之赋值语句的效率并无提高。
  2. 每次执行函数时重新初始化。
  3. 优点:由于初始化在运行时执行,所以可以用任何表达式作为初始值。
  4. 如果不显示地初始化,当自动变量创建时,它们的值都是垃圾。

静态变量与define的初始化时机:

 

 

 

 

 

 

 

 

 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值