- 1、本文档共83页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.5 内联函数 内联函数的定义: 在一般函数定义前面加上保留字inline,该函数就成为内联函数。 例:inline int add2(int n) {return n+2;} 内联函数的特殊之处 在于遇到内联函数的地方就用函数体代码来替代对函数的调用(内联展开)。 内联函数的作用: 既可以保证程序的可读性(保留了函数调用简短、清晰的优点),又能提高程序的执行效率。 内联函数一般是较小的、经常被调用的函数。克服了函数调用须占用较多内存空间的缺点。对于功能较为简单,让系统为了函数调用左那么多操作不值得(栈空间的分配,状态入栈,参数传递) 对内联函数的定义(包括函数体),一般放置在头文件中。 5.6 函数重载 函数重载与重载函数 使用重载函数是为了提高程序的可读性。 函数重载就是指同一作用域内的多个函数使用相同的 函数名,这些同名的函数就是重载函数。但重载的函数必须在参数的数量或类型上与其他同名函数有所不同。在函数调用时,编译器会根据实参的类型和个数选择与之匹配的函数调用。 例:long add(long a,long b){return a+b;} double add(double a,double b) {return a+b;} 如: add(3L,5L) add(3.0,5.0) 重载函数的使用方法: 编译系统用函数参数区分重载的不同函数,而不是通过函数的返回值类型,所以,参数表相同而函数类型不同的两个重名函数不是重载函数,而是错误的定义。 如:int get( ); float get( ); 不能让功能不同的函数进行重载。因为使用重载函数的目的就是为了具有相似功能的操作具有相同的名字以提高程序的可读性。 5.7 函数和变量的作用域 作用域就是标识符(常量、变量、函数)在程序中能使用的范围。生存期是指占用内存单元(生存)的时间。 一、函数的作用域: 一般来说,函数的作用域是全局的,不但在定义它的文件可以调用,而且在同一个应用系统的其他程序文件也可以调用。 如果一个函数仅仅为了提供给同一文件中的函数调用,则应将其说明为static,以防止可能存在的名字冲突。这样的作用域称为文件作用域。 例:static long add(long a,long b){return a+b;} 则add函数只允许被同一程序文件中的函数调用。 二、变量的作用域和生存期: 作用域:局部作用域、文件作用域 生存期: 函数的调用是通过栈来完成的,每次调用一个函数时,系统就在栈中开辟一块空间,然后将函数的局部变量建立在这个空间上。当函数执行结束后,栈空间也就随之消失,所以函数的局部变量生存期就是函数执行的短暂期间,我们称这种生存期为局部生存期;而一个全局的变量在整个程序运行的各个阶段都是存在的,它的生存期和程序的运行期一样,这种生存期是静态生存期;可以在程序运行期间动态的在堆中申请使用空间,然后在适当的时候释放,这样的存储区具有动态生存期。 程序运行期间的内存分布 程序代码区:程序编译后的二进制代码。 全局数据区: 全局变量及静态局部变量,具有静态生存期,在整个程序运行期间都存在。 堆:用new动态申请的变量,具有动态生存期,用new申请时产生,delete 释放时消失。 栈:局部变量,函数参数。具有局部生存期,函数调用时产生,函数调用结束时消失。 初始化问题: 具有静态生存期的变量(全局变量和静态局部变量),如果用户不对其赋初值,系统会自动将其初始化为0。 具有动态生存期或局部生存期的的变量,如果用户不对其赋初值,系统不会自动赋初值,所以其值不确定。 静态局部变量: 具有静态生存期的变量是在编译时赋初值的,即只赋初值一次。在程序运行时它已有初值,以后每次函数调用时不再重新赋初值,而只是保留函数上次调用结束时的值。 具有动态生存期或局部生存期的变量的赋初值不是在编译时进行的,而是在函数调用时进行的,每一次函数调用给一次初值,相当于执行一次赋值语句。 定义方法:在一般的局部变量前加上static 从下例可以看出静态局部变量的特点: int f(int a) {int b=0; static c=3; b=b+1; c=c+1; return(a+b+c); } 静态局部变量有以下特性: 具有静态生存期。也就是说它的生存期和整个程序的运行期是一样的,并且变量处于内存的全局数据区,而不在栈区;并且系统将其自动初始化为0。 只被初始化一次。 在函数退出以后,静态局部变量不被释放,它保留它的值。因此下一次进入函
文档评论(0)