博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C/CPP-变量

Posted on 2023-03-12 20:29  乔55  阅读(26)  评论(0编辑  收藏  举报

变量概念

  • 变量提供一个具名的、可供程序员操作的存储空间
  • 变量的数据类型决定了所占的内存空间大小、存储方式、存储范围、参参与的运算
  • 对象是一块能存储数据,并具有某种类型的内存空间

变量的分类

  • 按生命周期分类
    • 静态存储变量:程序运行期间分配固定的存储空间的变量
    • 动态存储变量:程序运行期间根据需要进行动分配存储空间的变量
      • 函数形参
      • 局部变量,比如函数内部定义的一些变量
      • 函数调用时现场的一些数据和返回地址等
  • 按作用域分类
    • 局部变量:函数形参,函数内部、块内部定义变量叫悦变量
      • 局部变量没有声明和定义的区别,经的作用域范围只在局部,故不存在先声明后定义的说法
      • 遇到同名变量时,内部作用域范围的变量屏蔽外部作用域范围的变量
    • 全局变量:(在函数外部定义的)存放在静态存储区
      • 程序开始执行时给全局变量分配存储区,程序执行完毕后释放这些成华区
      • 在程序执行过程中,他们占固定的存储单元,而不是动态地分配和释放

全局变量

  • 全局变量的概念
    • 不能重复定义,但可多次声明
    • 可跨文件使用,但容易被覆盖,使用时需注意
    • 加了extern关键字,该变量就变成外部 链接属性
    • 全局变量初始值默认是0

局部变量

static的特性

  • static变量具有继承属性
  • static变量与auto变量不同,auto变量不给定初始值,而static静态变量是有默认初始值的
  • 变量或函数一旦被static修饰,它只能在程序内部使用,防止对外扩展
  • 即使是局部static变量,仍有全局变量所具有的生命周期和局部可见性

static局部变量

  • 局部static变量的生命周期贯穿函数调用及之后的时间
  • 变量在程序的执行路径中第一次经过该变量的定义语句时被初始化,直到程序终止它才被销毁。在此期间即使函数结束,也对它无影响
  • static局部变量在编译时被赋初值,且只赋值一次
    • 静态局部变量若未被初始化,则会被初始化为0(内置类型)
    • 普通局部变量则是未定的
      缺点:长期占用内存,降低了程序可读性

static全局变量

变量初始化

  • 内置变量的默认初始化方式:若未被显式初始化,则它的值由位置决定
    • 定义于函数体外的内置类型初始值为0
    • 定义于函数体内部的内置变量类型变量值不被初始化,其值是未定义的,拷贝或访问它时将发生错误
  • 建议初始化每一个内置类型的变量,而绝大多数的类都无须显式初始化,因为它被提供了合适的默认值