全局变量的作用域(C语言程序变量作用域的实现机制是什么)

2025-02-21 11:00:02 0

全局变量的作用域(C语言程序变量作用域的实现机制是什么)

本文目录

C语言程序变量作用域的实现机制是什么

没有标签。作用域和编译后程序的内存布局有关,全局变量,静态变量存放在数据段中,在整个程序的生命周期内一直存在,作用域是全局的;动态分配的变量存放在堆区,在释放之前也是全局的;局部变量在栈上分配,由编译器管理,前一个作用域内的变量在下一个作用域没已经被释放了,所以是局部的

C语言程序中有全局变量和局部变量,函数内部的局部变量作用范围是整个函数吗

谢邀。

在开发C语言程序的过程中,若是能为变量取一个合适的名字,即使不写额外的注释也能让整个程序段一目了然。不过遗憾的是,有时候好用的名字会被其他变量占用,这时为变量取名就是一件头疼的事了。

我常常在同事的代码里看到诸如 size1, size2, size3 的变量名,令人眼花缭乱。

局部变量的作用域,是整个函数吗?

总体来说,C语言中的变量可根据作用域的不同分为全局变量和局部变量。一般来说,定义在函数中的变量被称为局部变量,非 static 局部变量存在于函数的栈帧中,函数的栈帧在其执行完毕后会被系统回收,此时局部变量自动释放,因此局部变量只在函数中有效。这一点相信即使C语言初学者,也是明白的。

不过不知道读者有没有想过这个问题:C语言函数中的局部变量作用范围是整个函数吗?比如,在函数 fun() 中定义了变量 size,那 size 是否在 fun() 函数所属的整个代码段都可用呢?在回答这个问题之前,应明白,至少gcc version 4.8.4 已经不再限制C语言函数定义变量必须在代码段的开头了,也就是说下面这段C语言代码是合法的:

定义变量 i 可以在若干行语句之后,甚至像下面的C语言代码这样,在 if 语句块中定义变量 size 也是合法的,请看:

现在在上面的C语言 main() 函数返回前添加一行 size ++;,即:

编译并执行添加 size++; 之后的C语言代码,会发生什么呢?请看:

编译失败了,提示第 8 行的 size 没有声明!这就奇怪了,size 明明在上面的C语言代码第 6 行声明了啊?!这其实就解答了“C语言函数中的局部变量作用范围是整个函数吗?”这个问题,显然,局部变量 size 的作用范围就不是整个函数。

不知道会不会有朋友认为:编译失败是因为 if 语句没有执行,所以 int size = 30; 也没有执行,因此 size 没有声明。

既然局部变量作用域不是整个函数,那它的作用域是什么呢?

相信读者已经知道,C语言代码中具有人类语言意义的 main、if、while 等词只是为了便于程序员使用,计算机并不能识别这些单词,因此若想执行C语言程序,需要通过编译器将代码“翻译”成计算机认识的指令序列。

编译器在编译C语言代码过程中,也要处理变量的作用范围问题。应明白“全局”和“局部”是对相对概念,所以编译器首先需要定义一个“局部”的标准,将“{}”符号包围的代码视为一个“局部”就是一个不错的选择。

以上分析基于 gcc version 4.8.4。

现在就清楚了,局部变量的作用范围就是它所属的 “{}” 包围的代码块,而全局变量的作用范围则是多个 “{}” 包围的代码块。再来看上面的问题,main() 函数中第 6 行的 size 属于 if{} 代码块,而第 8 行的 size 属于 main{} 代码块,因此虽然它俩名字一模一样,但是编译器仍然会认为是不同的变量,编译就报错了。

事实上,在C语言程序开发中,可以只使用“{}”做局部处理,例如下面这段代码:

编译上面这段C语言代码并执行,结果如下:

显然,函数内部的 “{}” 包裹的C语言代码段并没有影响到外面的 size,这下就不用怕变量名被占用了。

函数内部子{}代码块运行完毕之后,变量内存会被释放吗?

这个问题的答案其实上面已经解释了,变量即使是函数内部子{}代码块里的局部变量,它也是存储在函数的栈帧内的,而栈帧只有在整个函数运行完毕后才会被系统回收,所以函数内部子{}代码块里的局部变量占用的内存也在函数执行完毕之后才会被释放。

可以做如下实验,首先在函数的子 {} 代码块外部定义一个很大的数组,相关C语言代码如下,请看:

编译并执行这段C语言代码,然后使用 top 命令查看程序所占资源如下:

编译并执行这段C语言代码,然后使用 top 命令查看程序所占资源如下:

已经一目了然了。

小结

C语言函数中的局部变量的作用范围有时并不是整个函数,利用这一点可以在一定程度上解决变量名被占用的问题。不过应该注意,函数内部子{}代码块里的局部变量占用的内存也在函数执行完毕之后才会被释放。

欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

全局变量的作用域(C语言程序变量作用域的实现机制是什么)

本文编辑:admin

本文相关文章:


哪一个编程语言比较好?什么是pypl,以及tiobe-index的不同

哪一个编程语言比较好?什么是pypl,以及tiobe-index的不同

本文目录哪一个编程语言比较好什么是pypl,以及tiobe-index的不同哪一个编程语言比较好Java仍然是最流行的编程语言。据TIOBE的数据显示,几十年来,Java比其他语言更常名列榜首。许多知名公司使用Java来开发软件和应用程序,

2025年4月5日 03:30

java接口代码(不同编程语言的程序可不可以通过接口相互调用)

java接口代码(不同编程语言的程序可不可以通过接口相互调用)

本文目录不同编程语言的程序可不可以通过接口相互调用Java代码评审都是怎么开展的呢不同编程语言的程序可不可以通过接口相互调用我从两个方面进行回答,一个是本地调用,一个是远程调用。一、本地调用本地调用又两个方面阐述,一是不同进程(不同进行语言

2025年4月1日 13:00

java接口代码(不同编程语言的程序可不可以通过接口相互调用)

java接口代码(不同编程语言的程序可不可以通过接口相互调用)

本文目录不同编程语言的程序可不可以通过接口相互调用Java代码评审都是怎么开展的呢不同编程语言的程序可不可以通过接口相互调用我从两个方面进行回答,一个是本地调用,一个是远程调用。一、本地调用本地调用又两个方面阐述,一是不同进程(不同进行语言

2025年4月1日 13:00

c语言程序设计 谭浩强(谭浩强在程序员圈子里的口碑如何为什么)

c语言程序设计 谭浩强(谭浩强在程序员圈子里的口碑如何为什么)

本文目录谭浩强在程序员圈子里的口碑如何为什么大一软件工程学生,看完了谭浩强的书,越看越迷茫,感觉并没什么用,什么大程序都不会编,我该怎么办谭浩强在程序员圈子里的口碑如何为什么特别讨厌谭浩强。当年他写了本basic。我们科学院的人建议高校应该

2025年3月30日 13:50

打包安装程序太占内存怎么清除(打包安装程序怎么清除缓存)

打包安装程序太占内存怎么清除(打包安装程序怎么清除缓存)

本文目录打包安装程序怎么清除缓存华为手机打包安装程序怎么清理打包安装程序怎么清除数据手机安装软件失败后占大量内存怎么清除打包安装程序太占内存怎么清除华为手机的打包安装程序怎么清理打包安装系统如何清除数据华为软件包安装程序怎么清理打包安装程序

2025年3月30日 11:00

widevine(HTC 手机 开机说 Android 正在升级 正在优化第1个应用程序 共36个)

widevine(HTC 手机 开机说 Android 正在升级 正在优化第1个应用程序 共36个)

本文目录HTC 手机 开机说 Android 正在升级 正在优化第1个应用程序 共36个widevine content插件有什么用widevine是什么HTC 手机 开机说 Android 正在升级 正在优化第1个应用程序 共36个And

2025年3月29日 22:40

stakeholder theory(英语语言文学硕士毕业论文答辩一般会问什么问题)

stakeholder theory(英语语言文学硕士毕业论文答辩一般会问什么问题)

本文目录英语语言文学硕士毕业论文答辩一般会问什么问题stakeholder theory的案例会计英语摘要翻译 求求大家帮帮忙吧英语语言文学硕士毕业论文答辩一般会问什么问题英语语言文学硕士毕业论文答辩一般会问的问题如下:1、在答辩开始前,

2025年3月29日 17:00

zencart下载(如何用xampp搭建本地环境并安装zencart程序)

zencart下载(如何用xampp搭建本地环境并安装zencart程序)

本文目录如何用xampp搭建本地环境并安装zencart程序如何安装zencart下载包,以及安装中文语言包,如何安装ZenCart地图sitemapXML如何安装别人改好的zencart如何用xampp搭建本地环境并安装zencart程序

2025年3月29日 15:20

在C语言中 z=x>y x: y; 这个表达式是什么意思啊,求解?if(i=a<ba:b;i>0;i--)啥意思

在C语言中 z=x>y x: y; 这个表达式是什么意思啊,求解?if(i=a<ba:b;i>0;i--)啥意思

本文目录在C语言中 z=x>y x: y; 这个表达式是什么意思啊,求解if(i=a0;i--)啥意思C语言中:x>yx:y; 是什么意思问号和冒号的作用是什么在C语言中 z=x>y x: y; 这个表达式是什么意思啊,求解?:称为条件运算

2025年3月29日 11:50

provision apk(摩托罗拉xt800可以删除的系统程序有哪些)

provision apk(摩托罗拉xt800可以删除的系统程序有哪些)

本文目录摩托罗拉xt800可以删除的系统程序有哪些安卓系统com.android.provision.apk在哪里可以下载啊摩托罗拉xt800可以删除的系统程序有哪些朋友,你没有搜索过这个问题吗?我最近刚刚回答了一个朋友,再发给你看看吧。1

2025年3月29日 06:50

java程序编好了怎么运行(Java程序到底是如何运行的)

java程序编好了怎么运行(Java程序到底是如何运行的)

本文目录Java程序到底是如何运行的如何从命令提示符运行Java程序Java程序到底是如何运行的Java程序的运行得益于JVM虚拟机. 使用C语言编译的程序, 会通过编译器, 编译成exe文件, 然后将exe可执行文件交给Windows系统

2025年3月27日 23:20

kratos(kratos支持什么语言)

kratos(kratos支持什么语言)

本文目录kratos支持什么语言kratos这单词翻译音标Kratos是什么意思kratos支持什么语言Java,JavaScript等。Kratos 是一款免费开源的两栏结构并且拥有自适应效果的WordPress主题,她能够在任何浏览器下

2025年3月25日 09:00

VB语言是什么?vbs文件怎么运行

VB语言是什么?vbs文件怎么运行

本文目录VB语言是什么vbs文件怎么运行vbs是什么怎么装vbaVB语言是什么Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为

2025年3月24日 09:00

python实现socket编程(python功能强大,开发网络程序如何快速入门)

python实现socket编程(python功能强大,开发网络程序如何快速入门)

本文目录python功能强大,开发网络程序如何快速入门人工智能需要会什么编程python功能强大,开发网络程序如何快速入门我认为人工智能,尤其机器学习,最重要的是算法能力以及问题建模“实际问题转化为机器学习问题”的能力,而编程语言只是算法实

2025年3月23日 12:30

谭浩强c语言电子版(哪本书最适合初学电工电子比如初学C语言就用谭浩强C程序设计,单片机就郭天祥单片机)

谭浩强c语言电子版(哪本书最适合初学电工电子比如初学C语言就用谭浩强C程序设计,单片机就郭天祥单片机)

本文目录哪本书最适合初学电工电子比如初学C语言就用谭浩强C程序设计,单片机就郭天祥单片机有什么好的学习C语言的方法哪本书最适合初学电工电子比如初学C语言就用谭浩强C程序设计,单片机就郭天祥单片机推荐邱关源的《电路》,这个很多高校作为教材使用

2025年3月23日 06:30

谭浩强c语言电子版(哪本书最适合初学电工电子比如初学C语言就用谭浩强C程序设计,单片机就郭天祥单片机)

谭浩强c语言电子版(哪本书最适合初学电工电子比如初学C语言就用谭浩强C程序设计,单片机就郭天祥单片机)

本文目录哪本书最适合初学电工电子比如初学C语言就用谭浩强C程序设计,单片机就郭天祥单片机有什么好的学习C语言的方法哪本书最适合初学电工电子比如初学C语言就用谭浩强C程序设计,单片机就郭天祥单片机推荐邱关源的《电路》,这个很多高校作为教材使用

2025年3月23日 06:30

微信小程序api(利用小程序API能实现哪些功能)

微信小程序api(利用小程序API能实现哪些功能)

本文目录利用小程序API能实现哪些功能微信小程序还会开放什么强大的功能利用小程序API能实现哪些功能小程序可以以微信客户端为介质调用手机硬件的API,比如:扫码,拍照,录像,定位,计步等等。另外微信小程序在微信这个超级庞大的流量入口有着自己

2025年3月22日 19:10

怎么做小程序(做小程序怎么自学)

怎么做小程序(做小程序怎么自学)

本文目录做小程序怎么自学如何快速制作小程序做小程序怎么自学小程序自学的道路是可行的,本人亲身经历。2年前,小程序公测开始,我就对小程序这个新的东西非常感兴趣,无奈不会编程,不是程序猿。身边也没有人做小程序,只有靠自己摸索。两年下来,也算半个

2025年3月22日 15:20

git 常用命令(使用git命令行的是什么样的感受是不是程序员对于命令行都有种“信仰”)

git 常用命令(使用git命令行的是什么样的感受是不是程序员对于命令行都有种“信仰”)

本文目录使用git命令行的是什么样的感受是不是程序员对于命令行都有种“信仰”公司c位程序员不愿使用git,怎么办如何看待不会使用git的程序员使用git命令行的是什么样的感受是不是程序员对于命令行都有种“信仰”先说说使用命令行的感受吧,那就

2025年3月21日 22:20

C程序的基本组成单位是?c程序怎么写

C程序的基本组成单位是?c程序怎么写

本文目录C程序的基本组成单位是c程序怎么写C语言程序编写c编译程序是什么C程序的基本组成单位是C语言基本组成单位是函数。C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少

2025年3月20日 08:20

更多文章:


计算机三大语言(计算机语言分为哪三大类)

计算机三大语言(计算机语言分为哪三大类)

本文目录计算机语言分为哪三大类编程语言分为哪三大类电子计算机语言分哪三类计算机语言分为哪三大类计算机语言主要分为四类:--低级语言--高级语言--专用语言--脚本语言 1、低级语言 - 机器语言、汇编语言和符号语言 - 汇编语言源程序必

2025年2月19日 16:50

c语言基础学习视频(非常不错的c语言视频教程)

c语言基础学习视频(非常不错的c语言视频教程)

本文目录非常不错的c语言视频教程有学习c语言的基础入门资源吗,视频书籍均可非常不错的c语言视频教程可以到IT学习联盟下载。…………………………………………………… 看你问的问题,应该是对c++很感兴趣,其实你可以自学c++。关于如何学习c+

2025年3月20日 03:30

addeventlistener绑定事件(js 判断是否存有事件 addeventlistener)

addeventlistener绑定事件(js 判断是否存有事件 addeventlistener)

本文目录js 判断是否存有事件 addeventlisteneraddEventListener添加事件与普通添加事件有区别吗js 判断是否存有事件 addeventlistener原生实现无法判断是否有事件。如果确实需要请参照以下代码,另

2025年3月20日 18:10

数据库sql语句常见面试题(互联网公司在面试数据分析师工作时会被问什么样的问题)

数据库sql语句常见面试题(互联网公司在面试数据分析师工作时会被问什么样的问题)

本文目录互联网公司在面试数据分析师工作时会被问什么样的问题oracle数据库新人面试都会问什么问题,流程是什么呢在哪里可以免费练习python和sql的题呀互联网公司在面试数据分析师工作时会被问什么样的问题互联网数据分析岗位需求量和薪资都比

2025年3月15日 02:30

markdown笔记(程序员们是如何进行笔记管理的)

markdown笔记(程序员们是如何进行笔记管理的)

本文目录程序员们是如何进行笔记管理的如何高效使用和整理印象笔记程序员们是如何进行笔记管理的使用VS Code来写Markdown文档,这是我在写书时的截图:然后使用VS Code的插件将文档转成静态网页,这是我网页的截图,使用VS Code

2025年2月22日 07:20

android api 30(android API是什么)

android api 30(android API是什么)

本文目录android API是什么android 的API如何使用Android历史版本的API等级android怎么使用api获取数据开发android应用需要哪些api如何使用Android调用百度地图APIandroid 的api使

2025年2月15日 18:30

equals和等号的区别(java==和equals的区别)

equals和等号的区别(java==和equals的区别)

本文目录java==和equals的区别“equals“和“==“的区别java中equals和==的区别“equals“和“==“的区别!!!!c# 中的Equals()和==有什么区别比较字符串是等号和equal有什么区别 - C#编程

2025年4月3日 10:50

西门子组态软件wincc教程(如何安装西门子wincc组态软件要具体的)

西门子组态软件wincc教程(如何安装西门子wincc组态软件要具体的)

本文目录如何安装西门子wincc组态软件要具体的从西门子官网上下载的wincc V7.0 Demo的使用方法西门子wincc画面设置方法模拟量怎样添加西门子plcsim 怎么和wincc连接PLC组态怎么学组态软件WinCC及其应用的介绍西

2025年3月4日 12:00

patch是什么文件(本地patch是什么意思)

patch是什么文件(本地patch是什么意思)

本文目录本地patch是什么意思编程中project、file、program、patch各是什么含义patch是什么意思本地patch是什么意思指补丁的意思比如内存补丁、文件补丁等,也是电脑命令程序的一种.patch - patch.ex

2025年3月27日 21:10

日志分析系统(日志分析系统硬件配置啥配置求各位大牛解答一下)

日志分析系统(日志分析系统硬件配置啥配置求各位大牛解答一下)

本文目录日志分析系统硬件配置啥配置求各位大牛解答一下网络安全审计产品是什么网站公安局备案要的!如何分析windows系统日志elk日志分析平台是什么意思日志分析系统硬件配置啥配置求各位大牛解答一下1.系统概述2、安装过程安装java环境3、

2025年2月24日 18:40

世界时间怎么换算?什么是世界时间

世界时间怎么换算?什么是世界时间

本文目录世界时间怎么换算什么是世界时间世界各国时间对应北京时间24小时对照表 有吗世界标准时间表世界时间标准划分世界的时间(日期)是谁统一的怎样统一的世界时间指的是什么为何全世界时间不一样世界时间以什么为标准今天,世界发生了哪些让人“惊奇”

2025年3月1日 23:30

blogspot(blogspot怎么打不开)

blogspot(blogspot怎么打不开)

本文目录blogspot怎么打不开如何换blogspot的背景啊blogspot是什么意思如何访问blogspotblogspot为什么会一直被封blogspot怎么打不开这一年以来,blogspot晕了这么多次,我相信不少读者早就掌握了这

2025年3月8日 08:00

parameter1(书上说,linux命令格式为 command [-options] parameter1 parameter2 ls -al,这个怎么理解)

parameter1(书上说,linux命令格式为 command [-options] parameter1 parameter2 ls -al,这个怎么理解)

本文目录书上说,linux命令格式为 command [-options] parameter1 parameter2 ls -al,这个怎么理解C++里cannot convert parameter 1 from ’double’ to

2025年2月10日 00:50

吉祥图案剪纸(剪纸是什么事物)

吉祥图案剪纸(剪纸是什么事物)

本文目录剪纸是什么事物传统剪纸与现代剪纸区别在哪剪纸是什么事物剪纸是国家级非物质文化遗产,但剪纸跟其他非物质文化遗产不同,几乎在每家每户都能看到剪纸,尤其是在春节的时候。但想深入了解剪纸这门艺术,就要先了解它的前世今生。剪纸的前世今生1、在

2025年3月27日 19:00

gtalkservice(跪求 lg gt540 andriod 2.1 gtalkservice.apk、talk.apk、talkprovider.apk文件)

gtalkservice(跪求 lg gt540 andriod 2.1 gtalkservice.apk、talk.apk、talkprovider.apk文件)

本文目录跪求 lg gt540 andriod 2.1 gtalkservice.apk、talk.apk、talkprovider.apk文件gtalkservice.apk 怎么安装跪求 lg gt540 andriod 2.1 gta

2025年3月5日 19:00

boundless品牌(boundless voyage什么牌子)

boundless品牌(boundless voyage什么牌子)

本文目录boundless voyage什么牌子关于prada品牌的介绍,英文版本,课堂ppt用(急急急!追加分)boundless voyage什么牌子boundless voyage是一个箱包品牌。全称为VoyageTime。它成立于2

2025年4月3日 13:30

免费下载动画模板(我想自己制作动画,要什么软件,在哪野可以下载)

免费下载动画模板(我想自己制作动画,要什么软件,在哪野可以下载)

本文目录我想自己制作动画,要什么软件,在哪野可以下载画世界免费模板在哪我想自己制作动画,要什么软件,在哪野可以下载想自己制作动画,可以下载个简单一点的动画制作工具,比如万彩动画大师,用它来做动画就可以了。万彩动画大师简单容易上手,它的使用界

2025年3月23日 03:30

ascii码表怎么看(ascll码是什么怎样使用)

ascii码表怎么看(ascll码是什么怎样使用)

本文目录ascll码是什么怎样使用ascii码怎么用ASCII码编码表怎么看请教ASCII码表是怎么看的啊 看不明白啊怎么看进制转换的码表ASCIIASCII码表怎么看怎么用ascii编码表怎么看ASCII码如何才能看懂哦ascll码是什么

2025年3月9日 08:40

filter python(python中的filter()函数怎么用特别是一个函数有多个输入参数时)

filter python(python中的filter()函数怎么用特别是一个函数有多个输入参数时)

本文目录python中的filter()函数怎么用特别是一个函数有多个输入参数时python filter函数python filter对象怎么遍历python filter过滤器疑问Python 中关于filter函数问题求教python

2025年2月25日 12:50

房产小程序后台有什么功能?有房产项目的小程序吗有没有必要定制一个

房产小程序后台有什么功能?有房产项目的小程序吗有没有必要定制一个

本文目录房产小程序后台有什么功能有房产项目的小程序吗有没有必要定制一个房产证流程缮证是什么意思房产类的小程序开发可以做吗个人想做个房产网站请推荐几款软件!房产证网上查询系统在哪里想做一个,家政,房产,中介的网站.用哪个CMS好请帮忙推荐套房

2025年2月18日 02:10

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索