C语言作用域与生存期
作用域与生存期
作用域(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语言作用域与生存期相关推荐
- c语言作用域有哪两种变量,2017年计算机二级C语言字考点归纳:变量的存储类别、作用域及生存期...
7.7 变量的存储类别.作用域及生存期 1.变量的存储类别 在C语言中,有两类存储类别:自动类别及静态类别. 有4个与两种存储类别有关的说明符:auto(自动).register(寄存器).stati ...
- c语言函数变量的作用域与生存期
目录 一.作用域与生存期的概念 1.变量的作用域 2.变量的生存期 二.全局变量与局部变量 1.局部变量的作用域与生存期 2.全局变量的作用域与生存期 一.作用域与生存期的概念 1.变量的作用域 在c ...
- C语言中变量的作用域和生存期的区别
变量的作用域与生存期 一.变量的作用域 1.基本概念 2.代码分析 3.总结 二.变量的生存期 1.基本概念 2.C语言的内存分布 (1)基本概念 (2)数据在内存中的分布 3.总结 4.补充 一.变 ...
- C语言进程的内存分区、变量作用域和生存期
1.内存分区 C源代码进过预处理.编译.汇编和链接4步生成一个可执行程序. 程序在没有运行之前,也就是说程序没有被加载到内存前,可执行程序内部已经分好3段信息,分别是代码区(text ...
- 变量的作用域和生存期
1.局部变量&全局变量的定义和声明 对于局部变量的定义和声明可以不加区分.对于全局变量,其定义必须在所有函数之外,且只能定义一次,其一般形式为: [extern ] 类型说明符 变量名.. ...
- c++变量的作用域、生存期和可见性
局部变量 范围:在一个函数内部定义的变量,作用范围仅仅限于本函数体内. 生存期:程序运行到本函数才会给局部变量分配内存单元.函数运行完成局部变量所占的存储单元就被释放 全局变量 在函数体外部定义的变量 ...
- C++变量作用域、生存期、存储类别
写C.C++代码的小伙伴一定在头疼变量的作用域.生存期.存储类别问题.什么静态.外部.寄存器.局部.全局搞得一头雾水.今天咱们就来梳理一下他们的变态关系(什么不得了的事情???) 1.变量的作用域 说 ...
- 变量的作用域和生存期:_生存分析简介:
变量的作用域和生存期: In the previous article, I have described the Kaplan-Meier estimator. To give a quick re ...
- [UVMC]UVMC学习笔记之跨语言作用域的config操作
UVMC学习笔记二 --- 跨语言作用域的config操作 前言:UVMC引入了特定的内存共享方法,可以在UVM/SystemVerilog与SystemC模块之间传递记名的半全局变量,在使用方式上类 ...
最新文章
- C/C++-标准输入/输出重定向为文件输入/输出
- php cms帮助文档,phpcms手册
- solr配置-Schema.xml
- 解决ADB server didn't ACK问题,连上手机问题
- 历年安徽省二计算机考试题库,2010安徽省计算机等级考试试题 二级ACCESS最新考试试题库...
- java中大量匿名内部类的坏处_java中的匿名内部类总结
- Flutter InteractiveViewer 支持平移和缩放子Widget
- php爬取js对象,php如何用正则解析html中的js对象
- 判断对象是否超出屏幕
- Baidu-Rpc中Pb结构转为Json
- python中安装decimal模块_第38天:Python decimal 模块
- 【软件使用技巧】一(截图)
- 输入一行数字、数字之间用空格隔开python_Python 实现一行输入多个数字(用空格隔开)...
- Python多线程编程之线程子类化
- 网络交换机 - Swtich 简介
- service mesh解决的几个问题
- 马尔克斯写给读者的告别信
- 【机器学习】Goldstein-Armijo line-search
- 利用python获取自己的qq群成员信息!
- LiveNVR监控流媒体Onvif/RTSP功能功能-支持GB35114接入国标流媒体平台接入说明
热门文章
- 策略产品的进修之路—了解策略和策略产品
- java后台跳转页面实现方式
- 如何设置IDEA代码风格为Google风格,使用Google风格format
- 以太坊宠物商店 - 记录第一个Dapp
- mysql 公历变农历_经过完整测试的农历-公历相互转换
- linux配置163镜像,修改yum使用163开源镜像升级CentOS
- 电脑硬盘不小心格式化了文件怎么恢复,手把手教你变恢复高手
- 盘点Linux下的开源云平台云存储服务
- 用手机模拟加密门禁卡【不用电脑】
- 消愁计算机数字按键,明日之后2019最新钢琴谱数字编码顺序大全:纸短情长、起风了、往后余生[多图]...