欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    【精品】函数-C++结构化程序设计精品ppt课件.ppt

    • 资源ID:62820153       资源大小:1.45MB        全文页数:103页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【精品】函数-C++结构化程序设计精品ppt课件.ppt

    函数-C+结构化程序设计本章内容本章内容 函数概述函数概述 函数的定义和调用函数的定义和调用 函数原型函数原型 参数的传递机制参数的传递机制 函数与指针函数与指针 嵌套调用和递归调用嵌套调用和递归调用 函数参数的缺省函数参数的缺省 函数重载函数重载 函数模板函数模板 内联函数内联函数 系统函数系统函数 作用域、生存期与可见性作用域、生存期与可见性 编译预处理编译预处理 带参数的带参数的main()main()2例:求#include#includevoid main()double sum;sum=sqrt(4)+sqrt(9)+sqrt(16);coutsum=sumendl;3求求 4!+9!+16!l遇到的遇到的问题:没有求没有求阶乘的乘的库函数!函数!l自己自己动手做函数手做函数函数函数应该有名字有名字函数有入口(函数的参数)函数有入口(函数的参数)函数有出口(函数的返回函数有出口(函数的返回值)sqrt4293164xy4Fact(n)return f;函数名函数名函数的参数(入口)函数的参数(入口)可以有多个参数可以有多个参数函数的返回值(出口)函数的返回值(出口)只能有一个返回值只能有一个返回值double Fact(int n)double f;return f;怎样实现函数的功能?怎样实现函数的功能?double Fact(int n)double f=1.0for(int i=1;i=n;i+)f*=i;return f;函数的返函数的返回类型回类型#include double Fact(int n)double f=1.0for(int i=1;i=n;i+)f*=i;return f;void main()double sum;sum=Fact(4)+Fact(9)+Fact(16);cout“4!+9!+16!=sumendl;5#include double Factorial(int n)double temp=1.0;if(n=0)return 1.0;for(int i=1;i=n;i+)temp*=i;return temp;void main()double s;s=Factorial(6)+Factorial(17)+Factorial(20);cout6!+17!+20!=sendl;函数的定义函数的定义函数的调用函数的调用函数的首部函数返回值的类型函数名形参的类型和名称函数体内部变量说明部分可执行语句部分两种形式两种形式作为表达式一部分作为表达式一部分语句调用语句调用实参实参函数原型函数原型与变量一样,函数也需要先声明后使用。如果函数的调用在定义之前,则需要有函数原型。形式上,函数原型与函数定义的头部相同。#include double Factorial(int x);/函数原型函数原型void main()double s;s=Factorial(6)+Factorial(17)+Factorial(20);cout6!+17!+20!=sendl;double Factorial(int n)double temp=1.0;if(n=0)return 1.0;for(int i=1;i=n;i+)temp*=i;return temp;8C+语言源程序的特点语言源程序的特点l源程序构成:源程序构成:一个一个C+源程序由一个主函数和若干源程序由一个主函数和若干个相关的子函数组成。个相关的子函数组成。l主主函数:函数:总是以总是以main()作为开头,是源程序执行作为开头,是源程序执行的起点,其结尾是源程序运行的终点。它是的起点,其结尾是源程序运行的终点。它是唯一能唯一能够独立运行够独立运行的函数,可以位于源程序的前面、中间的函数,可以位于源程序的前面、中间或者后面。或者后面。l子函数子函数:是功能独立和简单的程序。它的运行需要是功能独立和简单的程序。它的运行需要函数间的调用指令。函数间的调用指令。l函数种类:函数种类:包括用户自编写函数、系统函数(包括用户自编写函数、系统函数(由由C+系统提供)。系统提供)。4.1 函数概述函数概述94.2 函数的定义和调用函数的定义和调用1.函数的定义函数的定义类型名类型名 函数名函数名(形式参数表形式参数表)语句序列语句序列 定义函数内容:函数名称、函数返值类型、函数定义函数内容:函数名称、函数返值类型、函数参数个数和类型、以及编写实现的函数的功能的语句参数个数和类型、以及编写实现的函数的功能的语句函数定义的一般形式为:函数定义的一般形式为:10函数定函数定义各部分的含各部分的含义函函数数名名:函函数数命命名名与与变量量名名命命名名方方法法相相同同。作作为一一种种标识符符,函函数数名名命命名名最最好好反反映映该函函数数的的功功能能,做做到到“见名知意名知意”。如用。如用factorial好于好于F。形式参数表:形式参数表:用用圆括号括起来;参数括号括起来;参数间用逗号隔开;用逗号隔开;必必须指明指明类型。若无参数,型。若无参数,圆括号内什么也不写或括号内什么也不写或写写void,但,但圆括号本身不能省略。括号本身不能省略。类型名:型名:实际是是返回返回值的数据的数据类型。可以是基本数型。可以是基本数据据类型、构造数据型、构造数据类型、型、指指针或引用或引用。return语句句实现函数的返函数的返值功能。功能。如果一个函数没有返回如果一个函数没有返回值,返回返回值类型型标记为void。如果定如果定义时没指定没指定类型,型,则默默认的的类型是型是int型(注意不是型(注意不是void型)。型)。11花花括括号号:花花括括号号内内是是各各种种语句句组成成的的函函数数体体,函函数数是是程程序序运运行行的的基基本本单位位。函函数数的的定定义不不可可以以嵌嵌套,套,即函数体内不允即函数体内不允许定定义另一个函数。另一个函数。return语句句:return 表表达达式式;可可以以没没有有表表达达式式,只只一一个个return(此此时可可以以省省略略);如如果果没没有有return语句句,函函数数执行行至至“”返返回回。函函数数内内可可以以多多个个return语句,注意函数的返回句,注意函数的返回值只能有一个。只能有一个。/P79,例,例4.2:没有形参和返回:没有形参和返回值的函数的函数注意函数返回值是void,只能用语句方式调用。函数返回值是int(缺省)或其它,如果没有return语句,则可能返回一个任意的数。当函数有返回值,如果不关心返回值是多少,也可以用语句方式调用。当函数作为表达式时,表达式的值就是函数的返回值12void alphabet()cout“abcdefgn”;main()alphabet();void alphabet()cout“abcdefgn”;return;/可以没有可以没有return语句语句main()int x;x=alphabet();coutxendl;/不能以表达式方式调用不能以表达式方式调用alphabet()/int alphabet()cout“abcdefgn”;return 1;main()int x;x=alphabet();coutxendl;/输出输出1alphabet()cout“abcdefgn”;main()int x;x=alphabet();coutxendl;/x的值其实没有意义的值其实没有意义alphabet()cout“abcdefgn”;main()int dummy;dummy=alphabet();alphabet();/两种调用方法都可以两种调用方法都可以13/P79,例,例4.1:定义求:定义求xn的函数的函数#includelong power(int x,int n)long p=1;/注意类型的一致注意类型的一致for(int i=1;i=n;i+)p=p*x;return p;main()long x;double y;x=power(3,4);/类型一致类型一致y=power(3,2.5);/没有得到没有得到3的的2.5次方次方coutx=x,y=yendl;/求求xy,(x、y可以输入)可以输入)#includepower(int x,int n)int p=1;for(int i=1;ixy;z=power(x,y);/类型一致类型一致cout“z=zendl;/求求xy(x、y可以输入)可以输入)#includepower(int x,int n)int p=1;for(int i=1;ixy;cout“z=power(x,y)endl;/不成功的例子不成功的例子#includepower(int x,int n)int p=1;cinxn;for(int i=1;i=n;i+)p=p*x;cout“p=”pendl;main()int x,y,z;x=3;y=4;z=power(x,y);cout“z=zendl;/成功但不好的例子成功但不好的例子#includepower()/不能写成:不能写成:power(int x,int n)int x,n;int p=1;cinxn;for(int i=1;i=n;i+)p=p*x;cout“z=”pendl;main()power();/函数的形参与函数内部的局部变量有什么不同?函数的形参与函数内部的局部变量有什么不同?14/P80,例,例4.3:有多个:有多个return语句函数语句函数#includemax(int a1,int a2)/函数类型函数类型int可以省略可以省略/返回返回a1、a2中大的数中大的数if(a1a2)return a1;elsereturn a2;void main()coutmax(3,4)endl;coutmax(9,8)endl;/返回语句可以有多个,但返回值只能有一个!返回语句可以有多个,但返回值只能有一个!152.函数的函数的调用用是指在一个函数执行中间,转去执行其他函数的过程。子函数一经定义,就可以被main()主函数、其他函数、甚至该子函数自身多次调用。函数调用形式为:函数调用形式为:函数名函数名(实参表)(实参表);注意实参与形参在注意实参与形参在数量数量、类型类型、位置位置上的一致性上的一致性long F(int x,double y,bool z)/定义定义main()long u;u=F(3,2.5,true);/调用调用16#include double F(int x,double y,bool z)coutx=xendl;couty=yendl;coutz=zendl;return 1.5;void main()long u=F(3.5,2,6);coutu=uendl;17函数函数调用的嵌套用的嵌套函数可以反复调用。函数的定义不可以嵌套,但是函数的调用可以嵌套。void main()int x,i;coutx;for(i=1;i=10;i+)coutpower(x,i)endl;long m=power(power(x,2),3);coutmendl;/如果如果x=2,则则m=64184.3 函数原型函数原型l函数原形的一般形式:函数原形的一般形式:类型名型名 函数名函数名(形参表);(形参表);l用用途途:事事先先声声明明某某函函数数的的存存在在。即即当当调用用函函数数语句句出出现在在被被调用用函函数数定定义之之前前的的时候候,必必须事先事先对该被被调用函数用函数进行原型行原型说明。明。调用在前,定用在前,定义在后,需要声明。在后,需要声明。定定义在在前前,调用用在在后后,可可以以没没有有声声明明,首首部部兼兼做声明的作用。做声明的作用。l 函函数数原原型型即即函函数数定定义的的第第一一行行的的内内容容,后后面加上面加上“;”(分号分号)。19举例,P80,例4.4:求35#include int power(int x,int n)int i,p=1;for(i=1;i=n;i+)p=p*x;return p;void main()int x,s;coutx;s=power(x,3)+power(x,5);couts=sendl;#include int power(int x,int n);/函数原形函数原形 void main()int x,s;coutx;s=power(x,3)+power(x,5);couts=sendl;int power(int x,int n)int i,p=1;for(i=1;i=n;i+)p=p*x;return p;#include int power(int a,int b);void main()int x,s;coutx;s=power(x,3)+power(x,5);couts=sendl;int power(int x,int n)int i,p=1;for(i=1;i=n;i+)p=p*x;return p;#include int power(int,int);void main()int x,s;coutx;s=power(x,3)+power(x,5);couts=sendl;int power(int x,int n)int i,p=1;for(i=1;i=n;i+)p=p*x;return p;#include int power(int,int);int power(int x,int n)int i,p=1;for(i=1;i=n;i+)p=p*x;return p;void main()int x,s;coutx;s=power(x,3)+power(x,5);couts=sendl;20函数原型举例,P82,例4.6#include f1();/原型,标准写法:原型,标准写法:int f1(void);void main()coutthis is main()n;/f1();与下边的调用有什么区别?与下边的调用有什么区别?coutf1()endl;int f1(void)/int和和void都可以省略都可以省略 f1()coutthis is f1()n;return 1;int f2(void)coutthis is f2()n;return 2;int f3(void)coutthis is f3()n;coutf2()endl;return 3;#include/原型原型int f1(),f2(),f3();void main()coutthis is main()n;coutf1()endl;int f1(void)coutthis is f1()n;coutf3()endl;return 1;输出:输出:this is main()this is f1()this is f3()this is f2()231214.4 参数传递机制参数传递机制l用实参去替换形参的过程称作参数传递。用实参去替换形参的过程称作参数传递。l当一个函数被调用时,系统会给该函数的形参分配当一个函数被调用时,系统会给该函数的形参分配存储空间,同时要求提供与形参的类型、个数存储空间,同时要求提供与形参的类型、个数一致一致的实参。的实参。#include int MyAdd(int x,int y)return 2*x+3*y;void main()coutMyAdd(3,4)endl;#include int MyAdd(int x,int y)return 2*x+3*y;void main()int x=3,y=4;coutMyAdd(x,y)endl;#include int MyAdd(int x,int y)return 2*x+3*y;void main()int x=3,y=4;coutMyAdd(y,x)endl;22l数数值传递机制(机制(传值方式)方式)将各个实参的值将各个实参的值 按位置先后顺序按位置先后顺序 拷贝(传递)拷贝(传递)给与之对应的各个形参。传递后的形参与对应的给与之对应的各个形参。传递后的形参与对应的实参虽然数值相同,但却是不同的变量。实参虽然数值相同,但却是不同的变量。P83,例,例4.7 将两个变量的内容交换将两个变量的内容交换#include void swap(int x,int y)int temp;temp=x;x=y;y=temp;void main()int a(15),b(18);swap(a,b);cout“调用调用swap的输出的输出:a=”a“,b=bendl;调用swap的输出:a=15,b18#include void swap(int x,int y);/函数原型函数原型void main()int a(15),b(18);cout“调用调用swap前的输出前的输出:a=”a“,b=bendl;swap(a,b);cout“调用调用swap的输出的输出:a=”a“,b=bendl;void swap(int x,int y)int temp;cout“交换前的输出交换前的输出:x=”x“,y=yendl;temp=x;x=y;y=temp;cout“swap函数输出函数输出:x=”x“,y=yendl;调用用swap前的前的输出出:a=15,b=18交交换前的前的输出:出:x=15,y=18swap函数的函数的输出:出:x=18,y=15调用用swap的的输出出:a=15,b=1823l传地址地址调用机制用机制 形参是一个形参是一个指指针,实参参传递的是地址。的是地址。/P84例例4.8#include void swap(int*x,int*y);/函数原型函数原型void main()int a(15),b(18);cout“调用调用swap前的输出前的输出:a=”a“,b=bendl;swap(&a,&b);cout“调用调用swap的输出的输出:a=”a“,b=bendl;void swap(int*x,int*y)int temp;cout“交换前的输出交换前的输出:*x=”*x“,*y=*yendl;temp=*x;*x=*y;*y=temp;cout“swap函数输出函数输出:*x=”*x“,*y=*yendl;调用用swap前的前的输出出:a=15,b=18交交换前的前的输出:出:*x=15,*y=18swap函数的函数的输出:出:*x=18,*y=15调用用swap的的输出出:a=18,b=1524传地址方式的一个典型地址方式的一个典型应用用使用使用传地址的方式可以使函数得到地址的方式可以使函数得到不止不止一一个个返回返回值。例:求解方程例:求解方程ax2+bx+c=0#include#includefun(double,double,double,double*,double*);main()double a,b,c,x1,x2;cinabc;if(fun(a,b,c,&x1,&x2)cout“x1=“x1“,x2=“x2endl;elsecout“无实数根n”;fun(double a,double b,double c,double*x1,double*x2)double t;t=b*b-4*a*c;if(t0)return 0;else t=sqrt(t);*x1=(-b+t)/(2*a);*x2=(-b+t)/(2*a);return 1;25l函数的引用函数的引用调用用引用是引用是给已知已知变量起个量起个别名。名。引引用用作作形形参参时,可可以以被被认为是是实参参的的一一个个别名名,传递后后形形参参和和实参参实际是是同同一一个个量量。对形形参参的的任任何何操操作作都都直直接接作作用用于于实参参。形形参参变化,化,对应实参参值也也发生了生了变化。化。引引用用调用用与与传地地址址调用用的的效效果果是是一一样的的,但它比但它比传地址地址调用更方便、直用更方便、直观。/P85例例4.9#include void swap(int&x,int&y);/函数原型函数原型void main()int a=15,b=18;cout主函数第主函数第1次输出次输出:“;couta=a“,b=bendl;swap(a,b);cout主函数第主函数第2次输出次输出:;couta=a“,b=bendl;void swap(int&x,int&y)int temp;temp=x;x=y;y=temp;26#include void F1(int&x,int&y)x*=x;y*=2;void main()int x=3,y=4;F1(x,y);cout“x=”x“,y=”yendl;x=9,y=8#include void F1(int&y,int&x)x*=x;y*=2;void main()int x=3,y=4;F1(x,y);cout“x=”x“,y=”yendl;x=6,y=1627参数参数传递方式小方式小结l值的的传递(passing by value)数数值传递机制:机制:形参是形参是变量,量,实参也是参也是变量或量或常数(或表达式),常数(或表达式),调用中行参用中行参发生改生改变,不,不影响影响实参原来的参原来的值。地址地址传递机制:机制:形参是指形参是指针,实参是地址。形参是地址。形参改参改变,实参相参相应改改变。l引用引用传递(passing by reference)形参是引用(形参是引用(别名),名),实参是参是变量。量。实参和形参和形参参实际是同一是同一变量。形参改量。形参改变,实参改参改变。引用与引用与传地址地址更加接近。更加接近。更加方便、直更加方便、直观和安全和安全28l函数的参数是数函数的参数是数组形参是一个指向数形参是一个指向数组的指的指针,实参是参是数数组的首地址。的首地址。l函数的返回函数的返回值是数是数组一般返回一个指一般返回一个指针即可即可数数组与函数的关系与函数的关系29数数组作作为函数的参数函数的参数当当数数组整整体体作作为函函数数的的参参数数时,采采用用传地地址址的的方方法法,避避免免了了成成批批数数据据在在形形参参和和实参参之之间进行复制。行复制。地地址址可可以以用用数数组名名,也也可可以以用用指指向向数数组的的指指针。例子:例子:P86,例,例4.10,数,数组排序排序#include void sort(int*a);/函数原型函数原型void main()int s10=2,3,5,1,7,9,0,4,8,6;sort(s);/实参是数组名,即数组地址实参是数组名,即数组地址for(int i=0;i10;i+)coutsi ;coutendl;void sort(int*a)/形参是指针形参是指针int temp;for(int i=0;i9;i+)for(int j=i+1;jaj)/*(a+i)temp=ai;ai=aj;aj=temp;#include void sort(int a10);/函数原型函数原型void main()int s10=2,3,5,1,7,9,0,4,8,6;sort(s);/实参是地址实参是地址for(int i=0;i10;i+)coutsi ;coutendl;void sort(int a10)/形参形参形式上形式上是一个数组是一个数组int temp;for(int i=0;i9;i+)for(int j=i+1;jaj)temp=ai;ai=aj;aj=temp;#include void sort(int a);void main()int s10=2,3,5,1,7,9,0,4,8,6;sort(s);/实参是数组实参是数组for(int i=0;i10;i+)coutsi ;coutendl;void sort(int a)/形参是数组形式形参是数组形式int temp;for(int i=0;i9;i+)for(int j=i+1;jaj)temp=ai;ai=aj;aj=temp;#include void sort(int a50);void main()int s10=2,3,5,1,7,9,0,4,8,6;sort(s);/实参是数组实参是数组for(int i=0;i10;i+)coutsi ;coutendl;void sort(int a100)/形参是数组形式形参是数组形式int temp;for(int i=0;i9;i+)for(int j=i+1;jaj)temp=ai;ai=aj;aj=temp;#include void sort(int*a);void main()int s10=2,3,5,1,7,9,0,4,8,6;int*p=s;sort(p);/实参是指针所保存的地址实参是指针所保存的地址for(int i=0;i10;i+)coutsi ;coutendl;void sort(int*a)/形参是指针形参是指针int temp;for(int i=0;i9;i+)for(int j=i+1;jaj)temp=ai;ai=aj;aj=temp;#include void sort(int*a);/原型和定义原型和定义看起来看起来不一样不一样void main()int s10=2,3,5,1,7,9,0,4,8,6;int*p=s;sort(p);/实参是指针所保存的地址实参是指针所保存的地址for(int i=0;i10;i+)coutsi ;coutendl;void sort(int a)/形参是数组形式形参是数组形式int temp;for(int i=0;i9;i+)for(int j=i+1;jaj)temp=ai;ai=aj;aj=temp;30/P87例例4.11#include void fun(int*p);/函数原型函数原型void main()int a=2,4,6,8,10;fun(a);/调调fun()函数函数 for(int i=0;i5;i+)coutai ;cout=p;q-,p+)t=*q;*q=*p;*p=t;31二二维数数组作参数作参数l二二维数数组作作函函数数参参数数时,形形参参可可以以使使用用二二维数数组指指针的各种等价形式:的各种等价形式:二二维数数组:x行数行数列数列数 省略行数的二省略行数的二维数数组x 列数列数 指指针*pf行指行指针(*px)指指针数数组*py指指针的指的指针*pl二二维数数组作参数作参数时,采用的是,采用的是传地址方式。地址方式。32P87,例,例4.12:求二维数组中每行元:求二维数组中每行元素的最大值及最大值所在列的位置。素的最大值及最大值所在列的位置。#include const int N=5;void fmax(int(*p)N);/函数原型,函数原型,行指针作形参行指针作形参void main()int aNN=0,0,-5,3,6,12,1,-1,9,7,0,0,1,3,-5,8,0,1,-1,-2,0;fmax(a);/调调fmax()函数,函数,数组名作实参数组名作实参void fmax(int(*p)N)int i,j,r=0,c=0,hmax;for(i=0;iN;i+)hmax=*(*(p+i)+0);/pi0 for(j=0;jhmax)/pij hmax=*(*(p+i)+j);r=i;c=j;coutr c ;coutmax=hmaxendl;#include const int N=5;void fmax(int*pN);/指针数组作形参指针数组作形参void main()int aNN=0,0,-5,3,6,12,1,-1,9,7,0,0,1,3,-5,8,0,1,-1,-2,0;int*p=a0,a1,a2,a3,aN-1;fmax(p);/调调fmax()函数,函数,指针数组名作实参指针数组名作实参void fmax(int*pN)int i,j,r=0,c=0,hmax;for(i=0;iN;i+)hmax=pi0;for(j=0;jhmax)hmax=pij;r=i;c=j;coutr c ;coutmax=hmaxendl;#include const int N=5;void fmax(int*p);/指针的指针作形参指针的指针作形参void main()int aNN=0,0,-5,3,6,12,1,-1,9,7,0,0,1,3,-5,8,0,1,-1,-2,0;int*q=a0,a1,a2,a3,aN-1;fmax(q);/调调fmax()函数,函数,指针数组名作实参指针数组名作实参void fmax(int*p)int i,j,r=0,c=0,hmax;for(i=0;iN;i+)hmax=pi0;for(j=0;jhmax)hmax=pij;r=i;c=j;coutr c ;coutmax=hmaxendl;#include const int N=5;void fmax(int pNN);/数组作形参,也可以没有行数数组作形参,也可以没有行数void main()int aNN=0,0,-5,3,6,12,1,-1,9,7,0,0,1,3,-5,8,0,1,-1,-2,0;fmax(a);/调调fmax()函数,函数,数组名作实参数组名作实参void fmax(int pNN)int i,j,r=0,c=0,hmax;for(i=0;iN;i+)hmax=pi0;for(j=0;jhmax)/pij hmax=pij;r=i;c=j;coutr c ;coutmax=hmaxendl;#include const int N=5;void fmax(int*p);/普通指针作形参普通指针作形参void main()int aNN=0,0,-5,3,6,12,1,-1,9,7,0,0,1,3,-5,8,0,1,-1,-2,0;fmax(a0);/初始地址作实参初始地址作实参/可不可以写成可不可以写成a00?写成?写成a呢?呢?void fmax(int*p)int i,j,r=0,c=0,hmax;for(i=0;iN;i+)hmax=*(p+0);for(j=0;jhmax)hmax=*(p+j);r=i;c=j;coutr c max=hmaxendl;p+=N;/修改指针,指向下一行修改指针,指向下一行 334.6 函数与指针函数与指针 4.6.1 函数返回指针或返回引用函数返回指针或返回引用 1.指针型函数指针型函数 函数的返回值是一个指针(地址),则称该函数为函数的返回值是一个指针(地址),则称该函数为指针函数。指针函数主要用在当函数结束时,需要指针函数。指针函数主要用在当函数结束时,需要大量的数据从被调用函数返回调用函数的情况。大量的数据从被调用函数返回调用函数的情况。指针函数的定义形式:指针函数的定义形式:类型类型 *函数名函数名(参数参数)34#include const int N=5;void fmax(int pN);void main()int aNN=0,0,-5,3,6,12,1,-1,9,7,0,0,1,3,-5,8,0,1,-1,-2,0;fmax(a);void fmax(int pN)int i,j,hmax;for(i=0;iN;i+)hmax=pi0;for(j=0;jhmax)hmax=pij;coutmax=hmaxendl;#include const int N=5;int*fmax(int pN);/返回一个指针返回一个指针void main()int aNN=0,0,-5,3,6,12,1,-1,9,7,0,0,1,3,-5,8,0,1,-1,-2,0;int*b;b=fmax(a);for(int i=0;iN;i+)coutbiendl;int*fmax(int pN)int i,j;static int hmaxN;for(i=0;iN;i+)hmaxi=pi0;for(j=0;jhmaxi)hmaxi=pij;return hmax;35返回指返回指针的函数使用的函数使用时要注意:要注意:不能把局部作用域内数据的地址作不能把局部作用域内数据的地址作为返回返回值,因,因为函数返回后,函数的局部函数返回后,函数的局部变量占有的空量占有的空间被被释放,放,引用已消失空引用已消失空间的的地址是危地址是危险的的。因此在因此在fmax()函数中将函数中将字符型指字符型指针数数组hmax声明声明为static(静静态),这样在函数返回后静在函数返回后静态变量不会消失,量不会消失,对地址的引用是安全的。地址的引用是安全的。362.返回引用返回引用 函函数数也也可可以以返返回回引引用用,系系统统在在处处理理返返回回引引用用与与返返回回值值时时是是有有区区别别的的:函函数数返返回回值值时时,系系统统生生成成一一个个返返回回值值的的副副本本(或或称称临临时时变变量量),由由这这个个临临时时变变量量给给到到调调用用函函数数的的接接受受变变量量。而而返返回回引引用用时时,不不生生成副本,直接将引用的值给到调用函数。成副本,直接将引用的值给到调用函数。由于引用只是另一个量的别名,因此由于引用只是另一个量的别名,因此返回引用返回引用绝不能返回不在作用域范围内的变量(或对象)的绝不能返回不在作用域范围内的变量(或对象)的引用引用。因为一个变量(或对象)一旦退出其所在的因为一个变量(或对象)一旦退出其所在的作用域,对它的任何引用也就毫无意义。作用域,对它的任何引用也就毫无意义。37P97,例,例4.16:函数返回引用函数返回引用/P92例例4.16#include int&f1(int&a1);/函数函数f1()返回引用返回引用int f2(int a2);void main()int x=2;int b1=f1(x);int b2=f2(x);coutb1=b1 b2=b2endl;coutx=xendl;int&f1(int&a1)/a1和和x是一个变量是一个变量 a1+=a1;return a1;/返回值给了返回值给了a1,也就是,也就是xint f2(int a2)/将将x当时的值(当时的值(4)复制给)复制给a2 a2+=a2;return a2;/b1得到的是得到的是a2的值的值8。int&f1(int&a1)int aa;aa=a1*2;return aa;/错误错误改为改为f1(x);int b1=x;结果相同结果相同384.6.2 函数指针函数指针l函函数数也也占占据据内内存存空空间间,即即函函数数也也有有地地址址。因因此此可可以以声声明明一一个个指指向向函函数数的的指指针针,可可以以通通过过这这个个指针调用函数。这个指针就成为函数指针。指针调用函数。这个指针就成为函数指针。声明函数指针的一般形式:声明函数指针的一般形式:类型类型 (*指针)(参数表)指针)(参数表)注意:类型是被指函数的返回值的类型。注意:类型是被指函数的返回值的类型。对比:对比:int*f1(int a,int b)/函数函数int(*f2)(int a,int b);/指针指针39#includedouble f1(double x,double y)return x+y;void main()double z;double(*p)(double a,double b);p=f1;z=(*p)(3.14,1.23);/z=f1(3.14,1.23);coutz=zendl;#includedouble f1(double x,double y)return x+y;void main()double z;double(*p)(double,double)=f1;z=(*p)(3.14,1.23);coutz=zendl;40l主主要要用用途途:如如果果函函数数的的参参数数是是函函数数。实实参参是是具具体体用用到到的的函函数数名名,而而形形参参只只能是一个指向函数的指针。能是一个指向函数的指针。/使用一个指向函数的指针使用一个指向函数的指针#include#includedouble fun(double(*f1)(double),d

    注意事项

    本文(【精品】函数-C++结构化程序设计精品ppt课件.ppt)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开