ch5_2函数的参数传递-C++重点分析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.3 函数的参数传递 参数是调用者给出去的,被调用进接来过使用的数据。那么这个“给”和“接”的传递过程是怎样实现的呢? 函数调用的过程: 形式参数和实际参数 在定义函数时函数名后面的括弧中的变量名称为形式参数,简称“形参” ---被动接收,形如傀儡 在主调函数中调用一个函数时,函数名后面括弧中的参数称为实际参数,简称“实参”----主动施舍,占据主导 Notice: 实参与形参的个数、位置与类型必须一致。 C++语言规定实参可以是变量、常量或者表达式。 函数定义中的形参只有当发生函数调用时,才被分配内存单元。 调试中几个需要注意的细节: Variables窗口: 这个窗口始终跟踪当前上下文中重要的变量取值。但不能增加对变量的跟踪。 形参的值在即将开始执行被调函数max的定义体前就已经确定下来. context: (n. 上下文,环境,背景) 在variables窗口的上部,还有一个context的组合框,可以用来切换当前查看的上下文。 函数max的context随着函数max被调用而建立,而当max调用返回后被销毁。 函数max的context中的变量x\y与main中的变量x\y同名但不是同一东东。 从这里我们可以看出, C++在发生函数调用时: 首先就会为被调函数建立起不同于主调函数的一个空间。 依据实参值建立形参,然后开始执行其函数体。 在函数调用结束后,这个空间会被操作系统回收。 应用程序运行时内存布局 事实上。。。 函数运行时的栈空间中除了保存相应的数据外, 还要保存主调函数的发生函数调用时的地址(返回地址)和操作系统状态(现场) 函数调用时,C++需要做的事情: 建立被调函数的栈空间,栈空间的大小由函数定义体中的数据量多少决定; 保存主调函数的运行状态和返回地址; 传递参数; 将控制权转交给被调函数; 函数运行完成后,复制返回值到函数数据块底部; 恢复调用函数的运行状态; 返回到调用函数; 5.3.2 传值方式 void func(Type a); // Type为任意数据类型 void main( ) { Type x; func ( x ); } 5.3.2 传址参数1 ----指针参数 【例2】试分析能否利用指针参数交换两个变量的值。 【例3】编写函数mysort实现对大小为n的整型数组a从小到大排序。给定测试数据a[7]= {3,5,7,1,8,4,9}。 选择排序(select sort) void mysort (int a[n]) { for (int i=0;in-1;i++) { int j=i; for(int k=i+1;kn;k++) if(a[k]a[j]) j=k; if(j!=i) { int temp=a[j];a[j]=a[i];a[i]=temp; } } } void mysort (int a[ ], int n) void mysort (int a[7], int n) void mysort (int* a, int n) 传递指针可以使函数“返回”更多的值 函数的传址参数也能起到返回结果的作用,函数运行的结果并不一定要用返回类型规定的返回值来反映。尤其是当函数有多个计算结果时,就必须采用传址参数来返回计算结果。 如: 查找两个数中大数的max函数也可以这样写: void max(int x, int y, int *z ) { if(xy) z=x; else z=y; } 则在主调函数中可以这样调用max: void main( ) { int x=3,y=4,result; max (x, y, result); coutresult; } 【例4】自定义函数,实现C-串的复制。 void mystrcpy(char* from, char* to) { while(*from!=\0) *to++=*from++; *to=\0; } 以字符数组做实参传递给mystrcpy: void main() { char a[]=I am a teacher., b[]=You are a student.; coutaendlbendl; mystrcpy(a, b); coutaendlbendl; } 以字符指针做实参传递给mystrcpy: void main() { char *a,*b; a=new char[50]; b=

文档评论(0)

知识宝库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档