0
点赞
收藏
分享

微信扫一扫

C语言:存储类型、存储方式、生存期

猫er聆听没落的旋律 2022-03-26 阅读 167
c++

目录

一、变量作用域问题

{ }内就是变量的作用域

局部变量: 作用域就是{}内

全局变量: 作用域是整个程序生命周期

  • 优点:可以实现各个方法协同工作,有共同的接口
  • 缺点:
    • 全局变量在整个空间中都占用存储单元;
    • 增加了函数之间的耦合性,不利于模块的设计开发,设计开发要求“高耦合,低内聚”

当全局变量和局部变量重名时,局部变量覆盖全局变量

二、变量的存储方式和生存期

存储方式: 静态存储和动态存储

内存分区:

  • 程序区
  • 静态存储区:存储全局变量、static变量
  • 动态存储区:存储局部非static变量、函数形参、函数调用时现场保护和返回地址,用于PC寻址

三、存储类型

C语言中,每个变量和函数都具有两个数据:数据类型和存储类别

  • 数据类型可以告诉编译器,需要多大的内存空间
  • 存储类别告诉编译器,变量作用域和生存期

存储类别:

  • auto, 非static局部变量都是static存储类别,是默认的类别,可以不用赋初值
  • static, 变量值和存储单元使用后都不释放,存储在静态存储区,如果不赋初值,默认为0或’\0’。局部静态变量,虽然存储单元在,只能由本函数引用它
  • register, 一般变量是存储在内存中,register可以将变量存储在寄存器中,提高访问速度
    • 没有很大必要,编译系统会自动编译优化,将经常访问的变量自动加入寄存器中
  • extern, 针对外部变量
    • 将外部变量的作用域拓展到变量声明前
    • 将当前文件的全局变量拓展到另一个文件中使用,声明此变量在其他文件中声明,可以直接使用
    • 本质就是,我现在要使用这个变量,要么在本函数中后面定义了,要么在其他文件中定义了,否则报错

注意点:

  • 如果使用static定义,那么其他文件的extern就无法访问
  • 局部变量声明存储类型是指定存储区域和生存期问题
  • 全局变量一定存储在静态存储区,声明存储类型只是对变量作用域的拓展而已
举报

相关推荐

0 条评论