- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 函数f1 ( )中调用了f2 ( ),而f2 ( )中又调用了f1 ( ),相当于f1 ( )间接地调用了f1 ( )。 这种调用称为间接递归调用,调用过程如图3.4所示。 * 在调用函数f的过程中,又要调用f函数 程序中不应出现这种无终止的递归调用,而只应出现有限次数的、有终止的递归调用, 这可以用if语句来控制,只有在某一条件成立时才继续执行递归调用,否则就不再继续。 包含递归调用的函数称为递归函数。 * * 以4!为例讲解递归函数的调用过程 递归定义的两个要素: (1)递归终止条件; (2)递归定义使问题向终止条件转化的规则。 * 调用 a函数时,需要保存当前的现场,返回时需要恢复现场,当a函数很短时,保护现场与恢复现场所需的机器时间远大于函数的执行时间,对于对运行速度需要很高的程序,使用这种函数调用方式就划不来 * 属于5.3.2节 内联函数相当于其他语言的宏 一般函数调用 时,参数装入堆栈中,各个寄存器的内容和状态都需要保存。当函数返回时,还要恢复它们的内容和状态,因此函数的调用需要一定的开销 内联函数使用时,函数的调用是进行代码的扩展,而不是简单的函数调用,这提高程序的运行效率。 * * 就三要素提问。 * * 不仅对于形参变量, C++语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域也不同。 C++语言中的变量,按作用域范围可分为两种, 即局部变量和全局变量。 。 * 说明: (1)主函数中第一次输出变量a时,a还没有赋值,但是执行结果显示0。这是因为当程序执行时,全局变量开辟存储空间的同时被系统初始化为0(定义全局变量时,专门初始化除外)。调用fun1( )函数后,a在fun1( )函数中被赋值为5,所以主函数中第二次输出变量a时结果为5。 (2)全局变量可以定义在任何位置,但其作用域是从定义的位置开始到文件的末尾。一般来说,全局变量定义在所有函数上面,这样所有的函数就可以使用该全局变量了。而定义在文件中间的全局变量就只能被其下面的函数所使用,全局变量定义之前的所有函数不会知道该变量。 * 在函数体内定义了三个变量a、b和c,所以开始输出的结果为:1,2,3。 在外层程序块中定义了变量b,这时候函数级变量b被屏蔽,使用外层程序块的变量b的值4,所以输出的结果为:1,4,3; 但此时a使用的是函数级的变量a,所以“a=b”改变的是函数级的变量a的值,使之为4。 在内层程序块中定义了变量c,这时候函数级的变量c被屏蔽,而变量b是为外层程序块所定义的,所以“c=b”是将外层程序块中b的值赋给内层程序块中变量c,所以输出的结果为:4,4,4。 结束内层程序块,释放内层程序块变量c,重新使用函数级的变量c,所以输出结果为:4,4,3。 结束外层程序块,释放外层程序块变量b,重新使用函数级变量b,所以输出结果为:4,2,3。 * 1.动态存储方式,是指在程序运行期间动态地分配存储空间给变量的方式。 这类变量存储在动态存储空间(堆或栈), 执行其所在函数或程序块时开辟存储空间,函数或程序块结束时释放存储空间,生存期为函数或程序块的运行期间,主要有:函数的形参和函数或程序块中定义的局部变量(未用static声明)。 (1)自动变量:函数中的局部变量默认是自动变量,存储在动态数据存储区。自动变量可以用关键字auto作为存储类别的声明。 (2)寄存器变量:寄存器变量也是动态变量,可以用register作为存储类别的声明。 2.静态存储方式,是指在程序运行期间分配固定的存储空间给变量的方式。 (1)外部变量:外部变量就是只用数据类型关键字而未用static关键字定义的全局变量。 (2)静态变量:静态变量存储在全局数据区,使用static声明。 静态局部变量和是在定义局部变量时开头再添加一个static关键字所定义的。 静态全局变量是在定义全局变量时开头再添加一个static关键字所定义的。 auto存储类 :属于一时性存储,其存储空间可以被若干变量多次覆盖使用。 register存储类 :存放在通用寄存器中。 extern存储类 :在所有函数和程序段中都可引用。生存期是整个程序,在程序结束时才释放内存。 static存储类 :在内存中是以固定地址存放的,在整个程序运行期间都有效。 * 内部函数不能被其他文件中的函数使用,所以在不同文件中可以使用相同名字的内部函数。 * 其中,define是关键字,“宏名”是一个标识符,“字符串”是字符序列。 该语句的意思是“宏名”代表“字符串”。 执行该预处理代码时,编译系统将对程序语句中出现的“宏名”统统用“字符串”替代。 * 说明: (1)在定义宏时,“宏名”和“字符串”之间要用空格分开。而“字符串”中
文档评论(0)