《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 局部变量

相关文章
|
10天前
|
存储 C语言
C语言进阶---------作业复习
C语言进阶---------作业复习
|
10天前
|
存储 Linux C语言
C语言进阶第十一节 --------程序环境和预处理(包含宏的解释)-2
C语言进阶第十一节 --------程序环境和预处理(包含宏的解释)
|
10天前
|
自然语言处理 Linux 编译器
C语言进阶第十一节 --------程序环境和预处理(包含宏的解释)-1
C语言进阶第十一节 --------程序环境和预处理(包含宏的解释)
|
10天前
|
存储 编译器 C语言
C语言进阶第十课 --------文件的操作-1
C语言进阶第十课 --------文件的操作
|
11天前
|
存储 程序员 C语言
C语言进阶第九课 --------动态内存管理-2
C语言进阶第九课 --------动态内存管理
|
11天前
|
编译器 C语言
C语言进阶第九课 --------动态内存管理-1
C语言进阶第九课 --------动态内存管理
|
11天前
|
C语言
C语言进阶第八课 --------通讯录的实现
C语言进阶第八课 --------通讯录的实现
|
12天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
|
12天前
|
C语言
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
|
12天前
|
C语言
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)