关于变量存储类型的整理

 存储在《C++程序设计语言》一书中有这样的索引:存储(memory)存储(storage)存储(store)。
memory:
表示;动态;堆;堆栈;管理;管理,容器;管理,用户定义的实例;管理,自动;耗尽;缓冲区;静态;流失;碎片;未初始化;自动。
storage:
类;原始。
store:
动态;堆;局部;自由。
这里讲的memory是指内存。
在c语言中有两种存储数值的方式:变量和常量,其中每一种方式又有多种选项。
变量是一个数据存储位置,其值在程序执行期间可能发生变化;而常量的值是固定的,不能修改。
一个程序中的数值可以使全局的,也可以是局部的。
全局是指变量的生命期与整个程序相同,而作用域则是整个程序。在编程时,用全局变量将会带来一定的麻烦,所以使用时要多加考虑。仅当程序的所有或大部分函数都需要是用某个变量,才需要声明全局变量。通常const定义的符号常量应是全局的。外部变量也称为全局变量。
局部变量值在一个函数中起作用,但函数返回式,它的生命期也就结束了。
当然,全局和局部也并非是一个绝对的概念。
这里还有一对关系就是:静态和动态。
在默认的情况下,局部变量是动态的。这意味着每次调用函数时,都要重新创建变量;而当函数执行完毕后,便量将被释放。实际上,这意味着在函数被两次调用之间,函数中的动态变量的值将丢失。如果想在两次调用函数之间保留局部变量的值必须是用关键字static将它定义为静态的。
也就是说,静态变量值在函数首次被调用是初始化一次,以后调用时,程序知道变量已被初始化,因此不会在初始化变量,而变量的值仍未签一次退出函数式的值;而动态变量,每次函数调用时,都会被初始化为指定的值。
全局静态变量和常规全局变量的差别是:静态全局变量只位与他所在的文件中,且在他的定义之后的函数中可以访问;而普通全局变量对于所在文件中的所有函数而言都是可以访问的,同时其他文件中的函数也可以使用它。
常量按期用途可以分为:字面常量;符号常量。
字面常量是在源代码中直接输入的值,如int count=20;。
符号常量是程序中用名称(符号)表示的常量。他们都不能修改。
这里所说的修改其实是指两个方面:数值和数值类型。
c语言里定义符号常量的方式有两中:使用编译指令#define或使用关键字const。
然而,编译指令#define并不鼓励使用,因为它涉及到宏,而宏的使用本身就会给程序带来混乱,使设计的缺陷。现在大部分程序都使用const而不是#define。
#define和const的差别涉及到指针和变量作用域。
变量作用域指的是程序中的哪些部分可以访问变量,也就是说在哪些地方,变量是可见的。
说到作用域,变量指的是所有数据类型的变量:简单变量、结构、数组、指针等,也可能指的是用关键字const定义的符号常量。
变量在内存中存活的时间,称为变量的生命周期。
作用域会影响到变量的生命周期,也就是说什么时候分配和释放变量的存储空间。
存储类型             关键字          生命周期         定义位置        作用域
动态变量               无                       临时             函数内           局部
静态变量             static                    临时             函数内           局部
寄存器变量         register                临时             函数内           局部
外部变量                 无                      永久             函数外           全局(所有文件)
静态外部变量      static                    永久             函数外           全局(一个文件)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值