C—变量

在C语言中,变量要先定义后使用。

使用时,必须说明变量的存储类型与数据类型。

变量说明的一般形式:

<存储类型>  <数据类型>  <变量名>

  存储类型的关键词有 auto、register、static、extern

  数据类型可以是基本数据类型,也可以是自定义的数据类型。

auto与register对于自动存储,局部变量,在进入声明该变量的程序块时被建立,在程序活动时存在,退出该程序块时撤销,static与extern/对于静态存储。

  auto

局部变量,默认为随机值  eg: auto int k;  auto可省略。

  register

   Tips

  1.寄存器变量可以用来优化加速c语言程序

  2.声名只需在类型前多加register 即可,eg register int quick; (quick 就是一个整形的寄存器变量)

  3.register只是一个建议型关键字,能不能声名成功还取决于编译器(建议型的关键字还有c++中的 inline),若不幸没有请求成功,则变量变成一个普通的自动变量。

  4.是无法对一个register变量取地址的(因为寄存器变量多放在寄存器而非内存中,内存有地址,而寄存器是无地址的)

  5.即便没有请求成寄存器变量,没有如愿的放入寄存器中,但是,依然不能对他取地址,因为他已经被声明为register了

  什么情况用寄存器变量:

当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间。为此,C语言提供了一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,从而提高效率。寄存器变量的说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量,而循环计数是应用寄存器变量的最好候选者。

  什么变量可以声明为寄存器变量:

. 只有局部自动变量和形参才可以定义为寄存器变量。因为寄存器变量属于动态存储方式,凡需要采用静态存储方式的量都不能定义为寄存器变量,因为静态变量储存在静态区,包括:模块间全局变量、模块内全局变量、局部static变量。

  static

  静态存储类型变量,可以在函数体内,也可在函数体外说明。(默认是0)

     局部变量使用static修饰,有以下特点:

    1)在内存中以固定地址存放,而非动态存储(以堆栈方式存放)

    2)只要static变量所在的程序没结束,static变量就不会消失,下次再调用该函数,static变量不再重新说明,且保留上次调用存入的数值。

eg2:

 extern

extern称为外部参照引用型,使用extern来说明变量是想引用在其他文件中函数体外说明的变量。

在本文件中需要使用其他文件的全局变量时,不仅要在本文件中声明为extern变量,且在编译时需要把带此变量的其他文件一起编译进去。

static修饰的全部变量,其它文件无法使用。

extern1.c                                                                                          extern2.c

最新文章

  1. iOS 创建一个可以点击并拖拽的Button
  2. JVM之PC寄存器(Program Counter Register)
  3. HTML5 &lt;video&gt; - 使用 DOM 进行控制
  4. C#一元运算重载的深入理解
  5. openssl ans.1编码规则分析及证书密钥编码方式
  6. js自定义事件、DOM/伪DOM自定义事件
  7. phpcms v9 万能字段使用
  8. Linux ssh登录命令
  9. 笔记本win10关机异常解决
  10. JPA继承方式
  11. 编码 ASCII, GBK, Unicode+utf-8
  12. 作业:K-means算法应用:图片压缩
  13. sql注入练习,sqli-labs writeup
  14. jquery遇到的问题
  15. 【BZOJ4025】二分图
  16. 【Leetcode】535. Encode and Decode TinyURL
  17. 使用Gulp
  18. 前后端分离 开发环境通过CORS实现跨域联调
  19. C#6.0新特性:var s = $&quot;{12}+{23}={12+23}&quot;
  20. React-Native开发之BUG 总结

热门文章

  1. 使用Makefile编译Erlang
  2. jQuery HTML-设置
  3. 【串线篇】MVC与SpringMVC
  4. zabbix 基于sendmail发送邮件相关问题
  5. php图片无损压缩的问题解决
  6. boost smart pointer
  7. 企业实践 | 如何更好地使用 Apache Flink 解决数据计算问题?
  8. POJ 2251 Dungeon Master(dfs)
  9. Service系统服务(一):安装一个KVM服务器、KVM平台构建及简单管理、virsh基本管理操作、xml配置文件的应用、为虚拟机制作快照备份、快建新虚拟机
  10. (12)C++ 继承