C++变量存储类型

变量的存储方式可分为“静态存储”和“动态存储”两种。

静态存储变量通常在变量定义时就分配好存储单元并一直保持不变,直至整个程序结束。

动态存储变量是在执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的列子是函数的形式参数,在函数定义时并不给形参分配存储单元,只有在函数被调用时,才予以分配,函数调用完毕立即释放。如果一个函数被多次调用,则反复分配、释放形参变量的存储单元。

从以上分析可知,静态存储变量是一直存在的,而动态存储变量则是时而存在时而消失。

1C+ +中变量的存储类型分为如下几种类型:

  auto——函数内部的局部变量(auto可省略不写)。

  static——静态存储分配,又分为内部和外部静态。

  extern——全局变量(用于外部变量说明)。

  register——变量存储在硬件寄存器中。

auto和register属于动态存储方式,static和extern属于静态存储方法。

  (1)自动变量

  ①在函数内部定义的局部变量即为自动变量,用于说明自动变量的关键字auto可以省略。

  ②在函数头部定义的自动变量作用域为定义它的函数;而在块语句中定义的自动变量作用域为所在块。与C不同,C+ +还允许在变量使用之前才定义变量。

  ③编译程序不给自动变量赋予隐含的初值,故其初值不确定。因此,每次使用自动变量前,必须明确地赋初值。

  ④形参可以看成是函数的自动变量,作用域仅限于相应函数内。

  ⑤自动变量所使用的存储空间由程序自动地创建和释放。当函数调用时为自动变量创建存储空间,函数调用结束时将自动释放为其创建的存储空间。因此,自动变量随函数的调用而存在并随函数调用结束而消失,由一次调用到下一次调用之间不保存值。

  (2)外部变量

  ①在函数外部定义的变量即为外部变量。

  ②外部变量的作用域是整个程序(全局变量)。

  ③在C+ +中,程序可以分别放在几个源文件上,每个文件可作为一个编译单位分别编译。外部变量只需在某个文件上定义一次,其他文件若要引用此变量时,应用extern加以说明。(外部变量定义时不必加extern关键字)。

  ④在同一文件中,若前面的函数要引用在其后面定义的外部(在函数之外)变量时,也应用extern加以说明。

  ⑤外部变量是由编译程序在编译时给其分配空间,属于静态分配变量,对于数值型(整型、浮点型和字符型)外部变量来说,其有隐含初值0。

  引进外部变量的原因:其一是只要程序运行外部变量的值是始终存在的;其二是外部变量可以在所有函数间共享。

  在C+ +中,可以使用外部变量,但是,必须要清楚使用外部变量的副作用。使用外部变量的函数独立性差,通常不能被移植到其他程序中,而且,如果多个函数都使用到某个外部变量,一旦出现问题,就很难发现问题是由哪个函数引起的。在C+ +中,尽量不用或少用外部变量,可使用参数在函数间进行数据的传递。

  (3)静态变量

  内部静态变量:

  ①在局部变量前加上“static”关键字就成为内部静态变量。

  ②内部静态变量仍是局部变量,其作用域仍在定义它的函数内。但该类型变量采用静态存储分配,当函数执行完,返回调用点时,该变量并不撤消,其值将继续保留,若下次再进入该函数时,其值仍然存在。内部静态变量有隐含初值0,并且只在编译时初始化一次。

  外部静态变量:

  ①在函数外部定义的变量前加上“static”关键字便成了外部静态变量。

  ②外部静态变量的作用域为定义它的文件,即成为该文件的“私有”(private)变量,只有其所在文件上的函数可以访问该外部静态变量,而其他文件上的函数一律不得直接访问该变量,除非通过外部静态变量所在文件上的各种函数来对它进行操作,这也是一种实现数据隐藏的方式。

  ③与内部静态变量一样,外部静态变量也采用静态存储分配,有隐含初值0。

  在C+ +中,除了支持C风格的内部和外部静态变量的使用之外,还可将类成员声明成static,它有着不同的含义。

  (4)寄存器变量

  ①只有自动(局部)变量和函数参数可指定为寄存器存储类,它的作用域与生存期与自动变量完全相同。

  ②当指定的寄存器变量个数超过系统所能提供的寄存器数量时,多出的寄存器变量将视同自动变量。

  ③只限于int,char,short,unsigned和指针类型可使用register存储类。

  ④不能对寄存器变量取地址(即&操作)。

  ⑤使用寄存器变量可以提高存取速度,可将使用频率最高的变量说明成为寄存器变量。一般常用于说明循环变量。

  由于硬件的快速发展,存储器(如内存)的性能有了很大的改进,因此,目前在实际应用中,使用register来说明变量的情况并不多。

  2生存周期

  (1)变量由编译程序在编译时给其分配存储空间(称为静态存储分配),并在程序执行过程中始终存在,这类变量包括全局变量、外部静态变量和内部静态变量。这类变量的生存周期与程序的运行周期相同,当程序运行时,该变量的生存周期随即存在,程序运行结束,变量的生存周期随即终止。

  (2)变量由程序在运行时自动给其分配存储空间(称为自动存储分配),这类变量为函数(或块)中定义的自动变量。它们在程序执行到该函数(或块)时被创建,在函数(或块)执行结束时释放所用的空间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值