欢迎来到天天文库
浏览记录
ID:59140303
大小:68.00 KB
页数:28页
时间:2020-09-25
《C程序设计教程ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++程序设计教程(第二版)第五章函数机制Chapter5FunctionMechanism10/7/20211函数C++的函数是完成既定任务的功能(过程)体,它涵盖了数学函数和一般过程.所以基于过程编程本质上就是基于函数编程函数机制一是指程序运行过程中对函数调用的数据管理和处理过程二是指编程中函数的使用规范.它包括函数参数的属性和传递规则,函数返回类型的匹配与审查,函数名字的识别原则,函数体效率的选择,函数体中数据的访问权限等10/7/20212第五章内容函数性质(FunctionCharacter)指针参数(PointerParameters)栈机制(Sta
2、ckMechanism)函数指针(FunctionPointers)main参数(Themain’sParameters)递归函数(RecursiveFunctions)函数重载(FunctionOverload)10/7/202131.函数性质(FunctionCharacter)函数:对输入参数负责,埋头做自己的事,最终返回结果函数组织:通过在函数中进行函数调用来扩展运行的规模,层层叠叠的函数构成树结构做法:将若干个函数组织成文件,又将若干个文件构成程序的办法来进行编程分工10/7/20214跨越数学函数的C++函数,有四种形态返回类型func(参数列表);
3、返回类型func();voidfunc(参数列表);voidfunc();10/7/20215黑盒原则:函数使用者应关注性能,而少去左右实现细节intcost(intn,intm){returnn*10;//运输n次m斤}intcost(intn,intm){returnm*10;//运输m次n斤}//选择下一个最好的intcost(intn,intm){return(n>m?m:n)*10;//保证运输次数最少}10/7/20216参数传递:形参是对实参的克隆,克隆必须遵守类型匹配规则voidf(Typea);//a为形参voidg(){Typex;f(x);
4、//x为实参}a实体x实体复制Type类型Type类型10/7/202172.指针参数(PointerParameters)传递指针:指针参数也是值传递的,指针值的真正用途是进行数据间访,以达到操作数据块(大小由之)的目的传递引用:引用参数本质上也是值传递的,它表现为名字传递,即以形参的名字来代替实参名字.如果实参不是实体名而是表达式,那么其表达式所对应的临时实体取名为形参,并要求其为常量引用意义:指针和引用参数的存在,使函数实际上可以访问非局部的数据区,函数的黑盒性便名存实亡.但这并非一定坏事,指针是一把双刃剑,或灵巧或邪恶.引用是为了防范指针非安全的无意操作
5、10/7/20218voidmySort(int*b,intsize);voidf(){inta[]={3,5,7,1,8,4,9};mySort(a,sizeof(a)/sizeof(a[0]));}传递指针须附带传递单位数据的个数元素个数传指针10/7/20219限制无意操作带来的意外副作用vectoradd(//向量加法constvector&a,constvector&b){vectorc(a.size());for(unsignedi=0;i6、;}10/7/2021103.栈机制(StackMechanism)运行时内存布局栈区进程空间代码区全局数据区堆区10/7/202111函数调用过程P146建立被调用函数的栈空间;保存调用函数的运行状态和返回地址;传递参数将控制权转交给被调函数函数完成后,复制返回值到函数数据块底部恢复调用函数的的运行状态返回调用函数10/7/202112未初始化局部数据的不确定性#includevoidf(){intb;//未初始化std::cout<<”B=>”<7、inta;//未初始化std::cout<<”A=>”<inta=5;intb=6;intmain(){int*ap=(int*)4202660;*ap=8;std::cout<8、Pointers)函数类
6、;}10/7/2021103.栈机制(StackMechanism)运行时内存布局栈区进程空间代码区全局数据区堆区10/7/202111函数调用过程P146建立被调用函数的栈空间;保存调用函数的运行状态和返回地址;传递参数将控制权转交给被调函数函数完成后,复制返回值到函数数据块底部恢复调用函数的的运行状态返回调用函数10/7/202112未初始化局部数据的不确定性#includevoidf(){intb;//未初始化std::cout<<”B=>”<7、inta;//未初始化std::cout<<”A=>”<inta=5;intb=6;intmain(){int*ap=(int*)4202660;*ap=8;std::cout<8、Pointers)函数类
7、inta;//未初始化std::cout<<”A=>”<inta=5;intb=6;intmain(){int*ap=(int*)4202660;*ap=8;std::cout<8、Pointers)函数类
8、Pointers)函数类
此文档下载收益归作者所有