C语言-变量生存期及作用域

C语言中变量的作用域和生存期的区别 变量的作用域与生存期一、变量的作用域1.基本概念2.代码分析3.总结二、变量的生存期1.基本概念2.C语言的内存分布(1)基本概念(2)数据在内存中的分布3.总结 一、变量的作用域 1.基本概念 作用域的域英文翻译为scope,作用域即作用范围。作用域关键在于域,作用域影响的是访问权限,出了作用域就无权访问了。 关于域: (1)有基于整体项目的域,可以做到整个项目的全局特性,我们称之为全局变量; (2)有基于文件的域,可以做到文件内全局特性,只能在文件内部访问,我们称之为静态全局变量; (3)有基于函数的域 阅读详情

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语言中的变量作用域和生存期 作用域定义了变量在程序中可见的范围,而生存期确定了变量存在的时间段。全局作用域的变量在整个程序中可见。在编写C程序时,正确理解变量的作用域和生存期对于避免命名冲突、优化内存使用和确保程序的正确性非常重要。因此,在使用变量时,请确保了解它们的作用域和生存期,并根据需要进行正确的声明和定义。块作用域是指在代码块内部定义的变量的作用域。块作用域变量的生存期始于其声明点,并在其所属的代码块结束时结束。除了上述作用域外,C语言还提供了额外的作用域控制机制,例如函数原型中的形参作用域和标签作用域。 阅读详情

相关推荐

C语言:变量的作用域、可见性和生存期

变量的可见性由变量在程序中的访问方式定义。变量在其作用域内可见,在作用域外隐藏。变量的可见性控制程序其余部分可以访问它的数量。您可以将变量的可见性限制为函数的特定部分、单个函数、单个源文件或 C 程序中的任意位置。变量的可见性和作用域彼此非常相似,但是在 C 程序中不一定可以访问(可见)每个可用变量(在作用域中)。让我们通过一个示例来了解这一点,其中我们在两个不同的范围内声明了两个具有相同名称的变量,在较大的范围内声明的变量在具有较小范围的块中可用,但它是不可访问的,因为较小的范围变量在。

新华编程特战队 434

C语言—变量的存储方式、作用域和生存周期

变量的存储方式、作用域和生存周期一、变量的存储方式二、变量的作用域和生存周期1.局部变量的存储类别a.普通局部变量b.static局部变量c.寄存器变量(register变量)2.全局变量的存储类别a.在一个文件内扩展全局变量的作用域b.将全局变量的作用域扩展到其它文件c.将全局变量的作用域限制在本文件中三、其它杂项讨论(重点:字符串)a.extern函数和static函数的区别(作用域)b.const变量和static变量存放位置c.关于字符串常量存储讨论四、参考博文 一、变量的存储方式 在C语言中,每

little_rookie__的博客 2436

VTK四视图联动避坑指南:解决vtkImagePlaneWidget窗宽窗位同步与切片序号更新的那些坑

本文详细解析了VTK四视图联动开发中的关键技术点与常见问题,包括切片位置同步、窗宽窗位同步的实现原理及回调机制设计。针对开发中遇到的回调事件不触发、渲染性能低下等问题,提供了实用的解决方案和优化技巧,帮助开发者高效构建医学影像和科学可视化应用。

weixin_42638178的博客 391

关于变量的生命周期与作用域及修饰词

关于变量生命周期即作用域和一些关键字的认识

m0_62229058的博客 568

Spacedesk保姆级教程:用旧平板给Windows电脑当副屏,从安装到避坑一步到位

本文提供Spacedesk保姆级教程,教你如何将旧平板变成Windows电脑的副屏,从软件安装到网络配置、显示优化及声音交互,一步步避开常见陷阱。通过WiFi实现扩展屏功能,支持4K分辨率和60Hz刷新率,让闲置设备焕发新生。

weixin_42524945的博客 1万+

解决ArcGIS-OpenStreetMap Toolbox-Load OSM File错误

在安装成功OpenStreetMap Toolbox后,首次运行Load OSM File工具,出现以下错误

Zjf的博客 8820

题库总结(选择判断)

这通常被称为**“case 穿透”**,即当一个满足条件后,它会执行该标签下的语句,并继续执行后续的标签下的语句,直到遇到语句。未指定存储类别的局部变量将默认为auto,分配在栈上这意味着它们在函数调用时会被创建,函数返回时会被销毁。文件指针通常用于指示文件的位置,而且在对文件进行读取或写入之前,文件必须被打开。A.结构体是一种复合数据类型,可以包含多个不同类型的成员变量。位置指针指向文件内部的字节位置,随着文件的读取会移动。B.结构体的成员变量可以是指针类型。D.结构体的成员变量可以是函数类型。

JaneHan_的博客 1356

利用netns做自环Iperf测试

netns可以让一台机器上模拟多个网络设备,是网络虚拟化的重要组成,将不同类型的网络应用隔离。一个net namespace有自己独立的路由表,iptables策略,设备管理。本文利用netns模拟网络来实现单机上网卡自环上的iperf测试或其他网络测试。

weixin_42414349的博客 3370

static作用:静态变量的生存周期和作用域

首先要理解生存周期与作用域的区别: 生存周期: 变量从定义到销毁的时间范围。存放在全局数据区的变量的生存周期存在于整个程序运行期间,而存放在栈中的数据则随着函数等的作用域结束导致出栈而销毁,除了静态变量之外的局部变量都存放于栈中。 作用域: 变量的可见代码域(块作用域,函数作用域,类作用域,程序全局作用域)。   static变量是指静态的变量,不管是在全局还是局部声明的static变量都

jion1761的博客 821

华为ENSP完整安装教程

华为ENSP完整安装教程

Hnm456756的博客 7330

【知识分享】车载以太网PCB布局设计指南

本文将深入探讨在设计车载以太网设备的印刷电路板(PCB)时需要着重考虑的若干关键主题。这些主题广泛涵盖了数据布线设计,以确保其符合信号完整性(SI)和电磁兼容性(EMC)标准;外部元器件的合理摆放;以及采取有效的抗电磁干扰(EMI)布局策略等方面。通过全面且细致地处理这些关键环节,能够显著提升车载以太网设备的性能与可靠性。

一只豌豆象的博客 1352

变量的作用域,生存周期:自动变量,静态变量,外部变量,寄存器变量

在C语言中,变量的生存期是由变量的存储类型说明的,变量的存储类型决定了变量的生存期,即决定变量何时“生”,何时“灭”。使用太多的全局变量,和使用太多的goto语句标号一样,都会导致程序混乱不堪,很难保证哪个变量不会被意外修改,也很难推断变量的值究竟是在哪个地方被修改的,而任何一个函数对它的修改都会作用到全局,同样,依赖全局变量的函数也会受此影响。区别在于他们的作用域有可能是不同的,这取决于静态变量是在哪里被访问,而在所有函数外定义的静态变量,称为全局静态变量,但是只能在本文件中调用,其他文件,无法调用。

ww1425408527的博客 2420

【Python基础】01 如何安装Python及集成环境

本文详细介绍了Python 3.13开发环境的完整搭建流程,涵盖三大操作系统(Windows/macOS/Linux)的Python安装方法、PyCharm专业IDE的配置使用,以及pip包管理工具的应用技巧。内容包括:Python 3.13各系统安装指南、PyCharm社区版与专业版的安装配置、环境验证方法、pip的基本命令与镜像源优化、虚拟环境管理,以及常见问题的解决方案。通过本教程,读者可获得一个高效完备的Python开发环境,为后续编程学习打下坚实基础。

nmdbbzcl的博客 1417

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

c语言函数的作用域与生存期

qq_74222589的博客 2810

基于STM32L4XX 、HAL库的SGM452B数字温度传感器驱动应用C语言程序设计

SGM452B_RESOLUTION_12BIT = SGM452B_CONFIG_R1 | SGM452B_CONFIG_R0 /* 12位分辨率,精度0.0625°C,转换时间200ms */SGM452B_RESOLUTION_11BIT = SGM452B_CONFIG_R1, /* 11位分辨率,精度0.125°C,转换时间100ms */SGM452B_RESOLUTION_10BIT = SGM452B_CONFIG_R0, /* 10位分辨率,精度0.25°C,转换时间50ms */

PP_Cottage的博客 327

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C语言中变量的生存期及作用域介绍

c 语言中变量的初始化及生存期、作用域浅谈生存期和作用域相关的关键字extern,static,auto,register 变量的初始化相关问题关键字介绍 extern extern 可以作用于变量,函数。所谓的外部变量是指定义在所有函数之外的变量。一般有两种,一种是定义在同一文件中,另一种是定义在别的文件中。同一个文件中的所有函数可以使用该文件中定义的外部变量而不要求必须用extern进行声明

shuizhilei3334的专栏 1548

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C语言进阶——7.变量作用域与生存期

C语言进阶——6.变量作用域与生存期

Sunrise的博客 444

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C语言进阶:变量的作用域与生存期,变量的分类,内存

文章目录变量的作用域与生存期1. 作用域2. 生存期3. 同名隐藏变量的分类1. 局部变量2. 全局变量3. 全局静态变量4. 本地静态变量5. 变量类型总结内存1.内存四区2. 堆和栈的区别3. 显示目标文件分区大小 变量的作用域与生存期 变量的隐形性质 变量的作用域与生存期相当于“攻击范围”和“生命力” 1. 作用域 编译时可能出现这样的问题 #include <stdio.h> int main(){ int n =0; for(int i=0;i<10;++i){

凯凯在此 655

c语言标识符的作用域与可见性(局部作用域与全局作用域),变量的生存期(静态生存期和动态生存期)

与普通全局变量不同,它们的作用域仅限于声明它们的文件内部,不能被其他文件访问。使用 static 关键字声明的函数只能在声明它们的文件内使用,不能被其他文件访问。在C语言中,标识符的作用域和可见性以及变量的生存期是非常重要的概念。- 在上面的例子中,staticVar 的值在每次调用 example 函数时都会累积,而不是每次重新初始化。标识符的作用域和可见性决定了它们在哪些地方可以被访问,而变量的生存期决定了它们在内存中的持续时间。

lexc_的博客 1001

作用域,生存期c语言程序,C语言中本地变量local variable的作用域与生存期

C语言中本地变量localvariable的作用域与生存期(2012-04-10 01:06:52)标签:c语言local杂谈C语言中本地变量localvariable的作用域与生存期《狂人C》中191页提到“每次运行到auto变量j所在block,会为j寻找存储空间,离开j所在代码模块,j的内存被释放掉。这是不正确的。结论应该是:对于C语言而言,本地变量会在栈开始处申请,栈销毁时结束生命。但是...

weixin_33976326的博客 391

C语言-变量作用域、生存期和同名隐藏

C语言笔记—变量作用域与生存期1. 作用域1.1 作用域是什么?1.2 作用域怎么用?2. 生存期2.1 生存期是什么?2.2 生存期怎么用?3. 同名隐藏 1. 作用域 1.1 作用域是什么? 作用域就是指在什么范围内(简单可以理解为大括号范围)可以访问这个变量。 1.2 作用域怎么用? 下面的代码 编译出错是因为i仅仅在for循环里可以生存,出了for循环就不存在了,所以编译报错 下列代码也...

kuanyew的博客 813

C语言序列3——全局变量和局部变量,标识符作用域、变量的生存期

#include <stdio.h> const int A = 10; int a = 20; static int b = 30; int c; int main(void) { static int a = 40; char b[] = "Hello world"; register int c = 50; printf("Hello world %d\n", c); return 0; } 作用域(Scope)这个概念适用于所有标识符,而不仅仅是变量,C语言的作用域.

ilgfcyll的博客 1301

六、C语言进阶:变量作用域与生存期

变量作用域与生存期

小脑斧的博客 353

local在c语言中的作用,C语言中本地变量local variable的作用域与生存期

回复 7# OwnWaterloo果然如我所料,如果没有O1这个编译选项,VC++2010是不会压缩空间的。如果加了O1这个"mini space"优化选项,出来的结果也不是OwnWaterloo提到的,临时变量都没有了,优化得很彻底。我用的是VC2010,过早的优化果然罪恶!(开个玩笑)无论如何,还是要谢谢OwnWaterloo的说法:勿以汇编释语言。其实我也同意这个看法,所以尽量以K&...

weixin_35721505的博客 1200

C语言进阶7:变量作用域与生存期

C语言进阶7:变量作用域与生存期1、作用域1.1 作用域是什么?1.2 作用域怎么用?(1)test1(2)test2(3)test32、生存期2.1 生存期是什么?2.2 生存期怎么用?(1)test1(2)test23、同名隐藏(1)test1(2)test2 变量的作用力和生存期相当于变量的"攻击范围"和"生命力"。 1、作用域 1.1 作用域是什么? 在什么范围内可以访问这个变量。 1.2 作用域怎么用? (1)test1 #include <stdio.h> int main(){

k0512的博客 471

C语言的变量的作用域和生存期

C语言的变量的作用域和生存期                摘自http://blog.youkuaiyun.com/piaojun_pj/article/details/5890186   一、c程序存储空间布局 C程序一直由下列部分组成:       1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;       2)初始化数据段(数据

1028
上一篇: C语言-运算符优先级及注意事项
下一篇: C语言-统计单词个数
syzdev
博客等级 码龄9年 852粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值