目录

  • 1 变量的生存期和作用域
  • 2 默认初始化规则(C++11)

1 变量的生存期和作用域

  • 变量的储存方式:动态储存(自动、寄存器)、静态储存(静态和外部)
储存方式 名称
自动变量 anto
寄存器变量 register
静态储存 static
外部变量 extern
  • 基本类型的静态变量(static)系统初始值为 0,全局变量也会自动初始化0
  • extern声明外部变量时,类型名可以写也可以不写,如extern int A,B,C,也可以写成extern A,B,C,因为它不是定义变量,可以不指定类型,只需写出外部变量名即可。
  • 若希望某些外部变量只限于本文件引用,而不能被其他文件引用,可以在定义外部变量时加一个static声明,如static int A;,那么在其他文件引用extern A就会报错。
  • 对局部变量声明static,作用是把它分配在静态内存,它在整个程序执行过程中不会被释放。对全局变量声明static,则限定该变量作用域只限于本文件。
  • 若要求函数只能被本文件内调用,称为内部函数,在定义内部函数时,加上static即可。
  • 若要定义外部函数,加上extern即可,但C语言默认不加static的就会外部函数,可以被其他文件调用。
  • Stack (栈内存):主要是用来存储 function calls(函数调用)和 local variables(局部变量) 的空间,其本质就是一个 Stack(栈)。最底层的便是 main() 函数,每调用一个函数时就会执行 push 操作,每当函数 return 时便执行 pop 操作。什么时候 main() 也被 pop 了,整个程序也就结束了。(如果这个 stack 变得太高以至于超出了最大内存地址,就会出现所谓的 stackoverflow

  • HEAP(堆内存):主要是用来存储由 malloc() 等申请的内存位置。如果 malloc() 返回 null 的话就往往表示这一块空间已经用完了。

  • Static (静态内存):这里的变量的生命周期与整个程序相同,即在进程创建是被申明,在程序退出时被销毁。global variables(全局作用域变量), file scope variables(文件作用域变量)和被 static 关键字修饰的变量会存在这里。

2 默认初始化规则(C++11)

  • 栈中的变量(函数体中的自动变量)和堆中的变量(动态内存)会保有不确定的值;
  • 全局变量(静态内存)和静态变量(包括局部静态变量,静态内存)会初始化为零。

C++11: If no initializer is specified for an object, the object is default-initialized; if no initialization is performed, an object with automatic or dynamic storage duration has indeterminate value. Note: Objects with static or thread storage duration are zero-initialized, see 3.6.2.

C语言-变量生存期及作用域相关推荐

  1. c语言变量生存期,C语言变量的生命周期

    变量的存储期是指程序运行过程中,变量在内存中的生存期,可以理解为变量的寿命.C语言中变量的存储期有自动存储期和静态存储期两种. 一般情况下,变量的存储期和作用域是紧密相关的.在函数外面定义的全局变量都 ...

  2. python变量作用域和生存期_变量的生存期和作用域

    变量的生存期和作用域是个很基础但又很重要的问题,所以我打算写几百字重温一下. 变量的生存期是指变量在什么时间段存在. 变量的作用域是指变量在哪些代码块中能够被访问. 一般来说变量生存期包含作用域.即在 ...

  3. C语言变量的存储方式和生存期

    一.动态存储方式与静态存储方式 从变量的作用域进行区分,变量可分为全局变量和局部变量. 从变量的生存期进行区分,变量可分为静态存储方式和动态存储方式. 静态存储方式:在程序运行期间由系统分配固定的存储 ...

  4. C语言变量的存储类别和生存期

    C语言变量的存储类别和生存期 我们知道,变量是有数据类型的,用来说明他占用多大的内存空间,可以进行什么操作. 除了数据类型,变量还有一个属性,称为"存储类别".存储类别就是变量在内 ...

  5. c语言变量按作用域范围分两种,第02天C语言(10):变量-作用域

    #变量的作用域 ##本小节知识点: ####1.[掌握]变量的作用域 ####2.[掌握]局部变量 ####3.[掌握]全局变量 ####4.[掌握]常见错误 ##1.变量的作用域 * C语言中所有变 ...

  6. C语言变量的类型和存储位置

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  7. c语言变量的值也可以不改变6,C语言学习复盘整理笔记(六)

    第六周:程序设计与C语言 6.1数组 数据可以存放在变量里,每一个变量有一个名字,有一个类型,还有它的生存空间.如果我们需要保存一些相同类型.相似含义.相同生存空间的数据,我们可以用数组来保存这些数据 ...

  8. 【转载】C语言变量详解

    原链接:http://gaga.yo2.cn/articles/detailed-c-language-variables-review.html 刚做题时发现全局变量会自动初始化,如int型则自动初 ...

  9. 存储过程debug值not a variable_C语言变量的存储类别

    在程序中经常会使用到变量,在C程序中可以选择变量的不同存储形式,其存储类别分为静态存储和动态存储.可以通过存储类别修饰符来告诉编译器要处理什么样的类型变量,具体主要有自动(auto).静态(stati ...

最新文章

  1. 从寄存器看I386和x64位中函数调用中参数传递
  2. PHP二维数组排序函数
  3. 以下关于单模光纤的说法中,正确的是( )
  4. 神舟战神换cpu教程_神舟将十代i5称为“神U出世”?聊聊到底有哪些优势
  5. android定时循环,Android AlarmManager实现定时循环后台任务
  6. 信息采集-火车采集器
  7. Missing iOS Distribution signing identity for XXXXX
  8. git管理工具_使用包管理工具
  9. 腾达ac9虚拟服务器,腾达AC9官方定制固件1.0版-加广告屏蔽、迅雷等
  10. appendChild+insertBefore:创建和添加节点
  11. WEB测试到移动测试的转换
  12. 5.12 CopyNet和 Pointer-Generator Net 复制机制和指针-生成器网络
  13. 微信小程序版本自动更新弹窗提示
  14. 火山PC编辑框组件详解2
  15. java 车牌号识别_JAVA车牌识别(包含车牌定位及车牌内容识别)
  16. UE4编辑器语言设置-中英对照
  17. 物联网和互联网有什么关系
  18. fins协议握手信号服务器响应,欧姆龙FinsTCP与FinsUDP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析附含报文模拟器等...
  19. Electron 屏幕锁定 快捷键锁定 屏蔽快捷键
  20. 服务器运维KPI指标,运维服务工程师考核表.docx

热门文章

  1. ava RMI 框架(远程方法调用)
  2. echart折线图小知识
  3. 推荐一个在线json数据格式化网站
  4. SwiftSuspenders 1.6 浅出深入 深入 2
  5. Android开发环境简单配置
  6. 对象存储/编码/解码
  7. Python爬虫-04:贴吧爬虫以及GET和POST的区别
  8. Unity中sharedMaterials 和 materials
  9. Source Insight 格式化
  10. TCL通讯将刊行代表1.09亿股的台湾存托凭据