- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4.3 函数参及其传递
§4.3 函数参数及其传递 1.函数的参数 1)包括形式参数和实际参数 形式参数是用逗号分隔的变量说明列表,这些变量称为函数的形式参数,有时也简称为形参。形式参数用于接收从函数调用程序传给这个函数的数据。 实际参数是用逗号分隔的表达式列表,其中每一个表达式称为实际参数,有时也简称为实参。在函数调用时,需要将实参的值传送给对应位置的形式参数,因而要求实参个数必须和形参个数相同(缺省参数或可变数目参数情况例外),并且实参的类型必须与对应的形参类型相匹配。 2)关于形参与实参的说明 ①函数中的形参变量,在未出现函数调用时,不占内存存储单元。只有在发生函数调用时,函数中的形参才被分配内存单元。调用结束后,形参所占的内存单元也被释放。 ②实参可以是常量、变量或表达式。如:max(3,a+b),但要求它们有确定的值。在调用时将实参的值赋给形参变量。如果形参是数组名,则传递的是数组首地址而不是变量的值。 ③在定义函数时,必须指定形参的类型。 ④实参与形参的类型应一致。 ⑤实参变量对形参变量的数据传递是“值传递”,即单向传递,只有实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。被调用函数的形参值的改变,并不改变主调函数的实参值。 函数参数传递包含两类: 1)主调函数调用函数时,把执行参数传入到被调函数中。用传值/传地址方式来实现。 2)被调函数执行后,计算所得结果回传给主调函数。 一般用“return (表达式)”或“return 表达式”来实现。 这两种方式都可以用全局变量来实现。 3.函数参数传递方式 ? C++语言提供了两种参数传递方式 按值调用(call by value) 按引用调用(call by reference) 1) 按值调用 简称传值,又称拷贝调用,它只允许调用函数向被调用函数单向传送信息。 实际操作:取出实参值传入函数作形参值。 实质:实参和形参分别分配不同的存储单元。 效果:在函数中对形参的修改不影响实参内容。 按值调用的好处:被调用的函数在执行时对调用函数没有副作用,即被调函数不会修改主调函数的数据,这是一种安全的参数传递方式。,它减少了函数之间的数据依赖,提高了函数的独立性。 按值调用举例: #includeiostream.h void swap(int x ,int y)??????? //实现X,Y的值交换 {?? int t; ??????? coutendlX=\tY=yendl; ??????? t=x; x=y; y=t;????????????? //X,Y的值交换 ??????? coutendlX=x\tY=yendl; } void main( ) {? int a, b; ????? coutendlEnter two numbers.\n A=; cina; ????? cout\nB=; cinb; ????? cout\nBefore swapping: A=a and B=bendl; ????? swap(a, b); ????? cout\nAfter swapping: A=a and B=bendl; ??} ? 程序执行如下: ?Enter two numbers. ?A=10↙ ?B=20↙ ?Before swapping: A=10 and B=20 ?X=10??? Y=20 ?X=20??? Y=10 ?After swapping: A=10 and B=20 该程序未能成功地交换两个整数的位置,其原因在 于程序错误地使用了按值调用。其示意图如下: 2)按引用调用允许信息在两个函数之间双向传递 ①引用类型:在其他数据类型后面加上一个修饰符“”,而该数据类型称为引用类型。 ????? 如:int var; float var; double var;??? //var为一变量 ②引用类型的含义:它不是创建一个新的对象(或变量),而是作为另一个对象(变量)的别名,如: ? ?int i=1;????? //声明了一个整形变量i,且初始化为1 ? ?int ir=i;?? //引用变量必须初始化,指明ir是i的别名 ???引入ir作为i的别名后,对ir的操作就相当于作用在变量i上。比如: 定义了上述i和ir之后,执行“ir=8;”语句 也就相当于将8赋值给i;即: ir=8;与i=8;效果相同。 ③注意“”的作用
文档评论(0)