C++实用教程[郑阿奇主编]5.ppt

C++实用教程[郑阿奇主编]5.ppt

ID:48086214

大小:668.50 KB

页数:38页

时间:2020-01-12

C++实用教程[郑阿奇主编]5.ppt_第1页
C++实用教程[郑阿奇主编]5.ppt_第2页
C++实用教程[郑阿奇主编]5.ppt_第3页
C++实用教程[郑阿奇主编]5.ppt_第4页
C++实用教程[郑阿奇主编]5.ppt_第5页
资源描述:

《C++实用教程[郑阿奇主编]5.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第5章函数5.1函数概述主函数main不仅是程序的入口函数,而且与其他函数相比较还有许多使用上的限制。例如,它不能被其他函数调用,不能用inline和static来说明等。ANSI/ISOC++还规定主函数main的函数类型必须是int,以保证程序的可移植性。图5.1函数调用关系示意图自定义函数是用户根据程序的需要,将某个功能相对独立的程序定义成一个函数,或将解决某个问题的算法用一个函数来组织。5.1函数调用关系示意图5.2函数的定义和声明与变量的使用规则相同,在C++程序中函数定要先定义后调用5.2.1函数的定义

2、C++中每一个函数的定义都由4部分组成,即函数名、函数类型、形式参数表和函数体,其定义格式如下:<函数类型><函数名>(<形式参数表>){函数体<若干语句>}注意:函数头末尾没有也不能有分号“;”,函数体花括号“}”后面也没有分号“;”.例:定义一个函数sum下面就函数定义的几个部分分别说明函数类型和返回值:若函数类型为void,则表示该函数没有返回值。2.函数名:注意自定义函数名与库函数名或系统命名尽量不要相同。3.形式参数表:在函数定义中,当形参个数为0时,应在圆括号中使用void关键字,表示没有形参,这是一个

3、良好的编程习惯。如intf(void){...}。4.形参的作用和设计:函数中的形参,用来指定调用此函数时所需要的参数个数和类型。一个函数的函数体中必须有相关语句对形参进行操作,否则形参定义毫无意义。5.函数体:函数体由一对花括号中的若干语句组成,用于实现这个函数的功能。它仅为程序结构而设定,本身不实现任何操作。注意:C++不允许在一个函数体中再定义函数5.2.2函数的调用和声明1.函数的实参和形参要注意形参和实参有如下区别2.函数的调用函数调用的一般格式如下:<函数名>(<实参表>)注:调用函数时要注意,实参与形

4、参的个数应相等,类型应一致,且按顺序对应,一一传递数据3.函数的声明声明一个函数按下列格式进行:<函数类型><函数名>(<形参表>)下面几种形式都是对sum函数原型的合法声明:intsum(inta,intb);//允许原型声明时的形参名与定义时不同intsum(int,int);//省略全部形参名intsum(inta,int);//省略部分形参名intsum(int,intb);//省略部分形参名5.3函数的参数特性5.3.1全局变量和局部变量C++中每一个变量必须先定义后使用,若变量是在函数头或函数体内定义的

5、,则该变量就是一个局部变量,它只能在函数体内使用,函数体外则不能使用。若变量是在函数外部(如在main主函数前)定义的,则它从定义开始一直到源文件结束都能被后面的所有函数或语句引用,这样的变量称为全局变量。#includeusingnamespacestd;函数声明和定义voidf(intn);//函数原型声明inta=8;//定义全局变量intmain(){cout<

6、定义{a=n;//将全局变量的值改为n}代码中,变量a是在main函数中定义的,是一个全局变量,因此它能在后面的main函数和f函数中使用。程序运行结果如下:810[例Ex_Global]使用全局变量示例5.3.2函数调用的内部机制函数调用是在栈内存空间中完成的,栈的工作原理是先入后出。当调用一个函数时,整个调用过程分为三步进行:调用初始化、执行函数调用、调用后处理。从图中可以看出,在调用函数sum时,C++首先进行如下初始化步骤。①因sum函数调用需要指定实参,这里是10和20,故先从右向左将实参值20(14h)

7、和10(0Ah)分别入栈(在汇编中使用push指令来进行)。②把函数返回后执行的第一条指令地址入栈(在汇编中call指令隐含一个这样的操作,此时入栈的地址是004015C1)。③将控制权转交到被调函数处(通过call和jmp指令来进行),然后执行函数调用,其步骤如下所述。④将所有相关寄存器的运行状态入栈,即保护现场。⑤在栈中开辟并预留一定数量的临时内存空间,此时函数的形参和函数体中定义的变量的内存空间的分配等操作一并在此步完成,其中形参的内存空间就是已压入栈中的实参值所在的内存空间。⑥执行函数体中的其他语句(z=x

8、+y;returnz;)。函数在返回时(这里是在“returnz;”执行之后),进行如下函数调用后处理的步骤。⑦将返回值保存在栈中的临时内存空间中(如果无返回值,则此步不执行)。⑧将所有入栈的相关寄存器运行状态出栈(使用pop指令),即恢复现场。⑨释放栈空间,根据返回地址,回到主调函数,执行下一条指令(即地址004015C1中的指令addesp,8)。5.3

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。