在函数调用时-东南大学自动化学院.pptVIP

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在函数调用时-东南大学自动化学院

不适合按值传递的情况包括: 当大型的类对象必须作为参数传递时。对实际的应用程序而言,分配对象并拷贝到栈中的时间和空间开销往往过大。 当实参的值必须被修改时。例如:交换 void swap1( int a, int b ) { int tmp = b; b = a; a = tmp; } 函数-参数传递 void main( ) { int x=1, y=2; swap1( x, y); } Swap1( a(x), b(y) ); void swap( int a, int b ) { int c; c=a; a= b; b=c; } void main( ) { int x, y; x=3; y=4; swap( x, y); } 3 4 x y a b c 3 4 3 4 x y a b c 4 3 3 进入swap 从swap出 考虑函数返回值的实际过程 考虑函数引用类型参数传递的实际过程 void swap2( int *a, int *b ) { int tmp = *b; *b = *a; *a = tmp; } void main( ) { int x=1, y=2; swap2( x, y); } 比较函数swap1 和 swap2的参数传递过程 Swap2( a(x), b(y) ); void swap(int *a, int *b) { int c; c=*a; *a= *b; *b=c; } 1 2 x y a b 交换x和y的值,可以调用swap(x, y) 用指针作为参数可以在函数中修改主调程序的变量值,即实现变量传递。必须小心使用!!! 函数-默认参数 对于某些函数,程序往往会用一些固定的值去调用它.例如对于以某种数制输出整型数的函数print: void print(int value, int base); 在大多数情况下都是以十进制输出,因此base的值总是为10。 C++在定义或声明函数时可以为函数的某个参数指定默认值。当调用函数时没有为它指定实际参数时,系统自动将默认值赋给形式参数。例如,可以将print函数声明为 void print(int value, int base=10); 调用print(20) 等价于 print(20, 10) 注意事项 缺省参数无论有几个,都必须放在参数序列的最后, 例如: Int SaveName (char *first, char second = “”,char *third = “”, char *fouth = “”); 在函数调用时,若某个参数省略,则其后的参数皆应省略而取其缺省值 函数-默认参数 对参数默认值的指定只有在函数声明处有意义。因为函数的默认值是提供给调用者使用的。 内联函数 (3) 带参数 #define max(A, B) (A)(B)?(A):(B) 在调用内联函数时,编译器直接用内联函数的代码替换函数调用,于是省去了函数调用的开销。 缺点:产生函数代码的多个副本并分别插入到程序中每一格调用该函数的位置上,使程序更大。 #includeiostream using namespace std; inline float cube(float s) { return s*s*s; } int main() { float side; cin side; cout cube(side) endl; return 0; } 内联函数-例子 内联以代码复制(膨胀)为代价,省去了函数调用的开销,提高函数的执行效率。如果相比于执行函数体内代码的时间,函数调用的开销可以忽略不计,那么效率的收获会很小。 以下情况不宜用内联: 如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。 如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。 内联函数-慎用 作业一 C++实现 (1) 随机输入一个整数 n, (2) 动态分配一个数组Arr(大小为n), (3) 随机生成n个整数存放到Arr中, (4) 对数组Arr进行排序 (5) 释放数组 (6) 其他需要考虑的地方 ,自己补充 作业二 思路:在边长为1的正方形内部,以正方形的正中心为圆心画一个半径为r(r0.5)的

文档评论(0)

wangyueyue + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档