作用域与生存期

作用域(scope)

通常来说,限定某个名字的可用性的代码范围就是该名字的作用域。

根据变量声明时的位置,可将其分为全局变量和局部变量。

全局变量(global) 也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件,其作用域是整个源程序。程序中所有未再次被声明的名字都会被认为是全局声明中的名字。

局部变量(local) 也称为内部变量,它是在函数内部定义说明的。其作用域仅限于函数内,即其所在的花括号{…}内,离开该函数后再使用这种变量是非法的。

生存期

生存期即变量值存在的时间,可以分为静态存储方式和动态存储方式。可见生存期只是和变量存储的位置相关。

静态存储(static) 全局变量即属于静态存储,通常是由编译器在编译时分配分定存储单元(静态存储区)并一直保持不变,在函数调用结束后不消失而保留原值,生存期为整个程序运行过程。

动态存储(auto) 函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),如不专门声明为 static 存储类别,都属动态存储,都是系统在运行时动态地分配存储空间的,数据存储在动态存储区(栈区)中,在函数调用结束时就自动释放这些存储空间。

#include <stdio.h>static int a;
const int b = 1;main(){auto int c;const int d = 1;static int e;
}

如图,a是一个全局静态变量,未初始化,其默认值为0,可读可写,写入的值在函数调用结束后不消失而是保留,一直储存在静态存储区,作用域是整个源程序,生存期为整个程序运行过程;

b是一个全局静态常量,省略了static,已初始化,值为1,可读不可写,一直储存在静态存储区,作用域是整个源程序,生存期为整个程序运行过程;

c是一个局部动态变量,未初始化,其默认值是不确定随机数,只有在函数被调用时才分配存储空间,可读可写,写入的值在函数调用结束后消失,作用域是其所在的花括号{…}内,生存期从函数调用开始到函数调用结束;

d是一个局部动态常量,省略了auto,已初始化,值为1,只有在函数被调用时才分配存储空间,可读不可写,作用域是其所在的花括号{…}内,生存期从函数调用开始到函数调用结束;

e是一个局部静态变量,未初始化,其默认值为0,可读可写,写入的值在函数调用结束后不消失而是保留,一直储存在静态存储区,作用域是其所在的花括号{…}内,生存期为整个程序运行过程。

本博客参考了百度百科,维基百科及以下资料参考资料1,参考资料2

谢谢观看!

C语言作用域与生存期相关推荐

  1. c语言作用域有哪两种变量,2017年计算机二级C语言字考点归纳:变量的存储类别、作用域及生存期...

    7.7 变量的存储类别.作用域及生存期 1.变量的存储类别 在C语言中,有两类存储类别:自动类别及静态类别. 有4个与两种存储类别有关的说明符:auto(自动).register(寄存器).stati ...

  2. c语言函数变量的作用域与生存期

    目录 一.作用域与生存期的概念 1.变量的作用域 2.变量的生存期 二.全局变量与局部变量 1.局部变量的作用域与生存期 2.全局变量的作用域与生存期 一.作用域与生存期的概念 1.变量的作用域 在c ...

  3. C语言中变量的作用域和生存期的区别

    变量的作用域与生存期 一.变量的作用域 1.基本概念 2.代码分析 3.总结 二.变量的生存期 1.基本概念 2.C语言的内存分布 (1)基本概念 (2)数据在内存中的分布 3.总结 4.补充 一.变 ...

  4. C语言进程的内存分区、变量作用域和生存期

    1.内存分区  C源代码进过预处理.编译.汇编和链接4步生成一个可执行程序.         程序在没有运行之前,也就是说程序没有被加载到内存前,可执行程序内部已经分好3段信息,分别是代码区(text ...

  5. 变量的作用域和生存期

    1.局部变量&全局变量的定义和声明 对于局部变量的定义和声明可以不加区分.对于全局变量,其定义必须在所有函数之外,且只能定义一次,其一般形式为: [extern ] 类型说明符  变量名.. ...

  6. c++变量的作用域、生存期和可见性

    局部变量 范围:在一个函数内部定义的变量,作用范围仅仅限于本函数体内. 生存期:程序运行到本函数才会给局部变量分配内存单元.函数运行完成局部变量所占的存储单元就被释放 全局变量 在函数体外部定义的变量 ...

  7. C++变量作用域、生存期、存储类别

    写C.C++代码的小伙伴一定在头疼变量的作用域.生存期.存储类别问题.什么静态.外部.寄存器.局部.全局搞得一头雾水.今天咱们就来梳理一下他们的变态关系(什么不得了的事情???) 1.变量的作用域 说 ...

  8. 变量的作用域和生存期:_生存分析简介:

    变量的作用域和生存期: In the previous article, I have described the Kaplan-Meier estimator. To give a quick re ...

  9. [UVMC]UVMC学习笔记之跨语言作用域的config操作

    UVMC学习笔记二 --- 跨语言作用域的config操作 前言:UVMC引入了特定的内存共享方法,可以在UVM/SystemVerilog与SystemC模块之间传递记名的半全局变量,在使用方式上类 ...

最新文章

  1. C/C++-标准输入/输出重定向为文件输入/输出
  2. php cms帮助文档,phpcms手册
  3. solr配置-Schema.xml
  4. 解决ADB server didn't ACK问题,连上手机问题
  5. 历年安徽省二计算机考试题库,2010安徽省计算机等级考试试题 二级ACCESS最新考试试题库...
  6. java中大量匿名内部类的坏处_java中的匿名内部类总结
  7. Flutter InteractiveViewer 支持平移和缩放子Widget
  8. php爬取js对象,php如何用正则解析html中的js对象
  9. 判断对象是否超出屏幕
  10. Baidu-Rpc中Pb结构转为Json
  11. python中安装decimal模块_第38天:Python decimal 模块
  12. 【软件使用技巧】一(截图)
  13. 输入一行数字、数字之间用空格隔开python_Python 实现一行输入多个数字(用空格隔开)...
  14. Python多线程编程之线程子类化
  15. 网络交换机 - Swtich 简介
  16. service mesh解决的几个问题
  17. 马尔克斯写给读者的告别信
  18. 【机器学习】Goldstein-Armijo line-search
  19. 利用python获取自己的qq群成员信息!
  20. LiveNVR监控流媒体Onvif/RTSP功能功能-支持GB35114接入国标流媒体平台接入说明

热门文章

  1. 策略产品的进修之路—了解策略和策略产品
  2. java后台跳转页面实现方式
  3. 如何设置IDEA代码风格为Google风格,使用Google风格format
  4. 以太坊宠物商店 - 记录第一个Dapp
  5. mysql 公历变农历_经过完整测试的农历-公历相互转换
  6. linux配置163镜像,修改yum使用163开源镜像升级CentOS
  7. 电脑硬盘不小心格式化了文件怎么恢复,手把手教你变恢复高手
  8. 盘点Linux下的开源云平台云存储服务
  9. 用手机模拟加密门禁卡【不用电脑】
  10. 消愁计算机数字按键,明日之后2019最新钢琴谱数字编码顺序大全:纸短情长、起风了、往后余生[多图]...