《C语言程序设计进阶教程》一2.3.3 局部变量-阿里云开发者社区

开发者社区> 华章计算机> 正文

《C语言程序设计进阶教程》一2.3.3 局部变量

简介: 本文讲的是C语言程序设计进阶教程一2.3.3 局部变量,本节书摘来华章计算机《C语言程序设计进阶教程》一书中的第2章,第2.3.3节, Intermediate C Programming[美] 陆永祥(Yung-Hsiang Lu) 著 徐东 译 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
+关注继续查看

2.3.3 局部变量

本文讲的是C语言程序设计进阶教程一2.3.3 局部变量,如果一个函数有局部变量,那么这些局部变量被存储在调用栈中。考虑下面的例子:
screenshot
实参k、m和p存储在返回位置A上面。局部变量t和u存储在实参上面的栈中。
screenshot
现在必须再加上一条调用栈的规则:
screenshot如果函数有局部变量,那么局部变量被存储在实参之上。
screenshot如果函数有实参,那么实参是存储在返回位置上的。
screenshot实参和返回位置共同构成了被调用函数的栈帧。
screenshot当一个函数被调用时,这条调用之后的行编号就被压入调用栈。这个行编号就是“返回位置”(RL)。这是在被调用函数结束(即返回)之后程序继续执行的地方。
screenshot如果相同的函数在不同行处被调用,那么每个调用都有一个相应的返回位置(每个函数调用之后的那行)。
screenshot当一个函数结束之后,程序将从存储在调用栈顶部的行编号处继续执行。调用栈顶部的内容就会被弹出。
局部变量总是存储在栈上,在函数调用期间它们一直存放在那里。与它们的存在形成对比的是,“全局变量”在函数调用之间存在。全局变量通常是在一个给出的源文件顶部进行指定,任何函数都可以对它们进行读和写。虽然有时方便,但全局变量也可能导致微小的软件bug。1973年,Wulf等人写了一篇文章“全局变量被认为是有害的”。它较为详细地解释了为什么程序员应该避免使用全局变量。软件社区普遍同意这一观点,全局变量的使用从那时起就开始被强烈地抵制。虽然C允许使用全局变量,编写优秀的软件几乎也总是避免使用它们。主要的问题在于全局变量可以在程序的任何位置发生改变。随着程序变得越来越大且复杂,要去追踪这些全局变量可能发生变化的位置就会变得越来越困难。失去了变化的踪迹经常会导致程序出现异常的行为。想要获得更多信息,请阅读Wulf的论文来理解全局变量存在问题的原因。虽然全局变量强烈不建议,全局常量却是可以接受且被经常使用的,因为它们不会变化。

原文标题:C语言程序设计进阶教程一2.3.3 局部变量

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python编程语言学习:利用locals函数判断某个变量参数之前是否已经被定义/存在/出现
Python编程语言学习:利用locals函数判断某个变量参数之前是否已经被定义/存在/出现
15 0
教你用C语言编写万年历,程序员超乎你的想象!
教你用C语言编写万年历,程序员超乎你的想象!
1394 0
Rust语言教程(1) - 一门没有GC的语言
Rust语言是一门没有GC的语言,那么,它是如何管理内存的呢?
3578 0
Spark学习之编程进阶——累加器与广播(5)
Spark学习之编程进阶——累加器与广播(5) 1. Spark中两种类型的共享变量:累加器(accumulator)与广播变量(broadcast variable)。累加器对信息进行聚合,而广播变量用来高效分发较大的对象。 2. 共享变量是一种可以在Spark任务中使用的特殊类型的变量。 3. 累加器的用法: 通过在驱动器中调用SparkContex
1332 0
《C语言程序设计进阶教程》一1.2 重定向输出
本文讲的是C语言程序设计进阶教程一1.2 重定向输出,本节书摘来华章计算机《C语言程序设计进阶教程》一书中的第1章,第1.1节, Intermediate C Programming[美] 陆永祥(Yung-Hsiang Lu) 著 徐东 译 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
922 0
Java进阶之并发编程——《我的Java打怪日记》
Java进阶之并发编程——《我的Java打怪日记》
37010 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载