函数

来源:互联网 发布:直销矩阵制示意图 编辑:程序博客网 时间:2024/05/21 04:20

返回指针类型:


#include<iostream>const int MAXN=1000+10;using namespace std;int *maxPoint(int *x, int *y){if(*x > *y) return x;return y;}int main(){int a=9,b=4;cout<<*maxPoint(&a,&b)<<endl;;return 0;}/*maxPoint()返回对象的指针,不需要复制产生实际对象的值。如果函数需要对大对象进行操作,使用函数指针显然可以节省匿名对象生成的时空消耗*///注意,指针函数不能返回局部变量的指针。如下定义是错误的:int *f(){int tmp;//...return &tmp;}//tmp是在函数f运行时建立的临时对象,f运行结束,系统释放tmp,因此,函数返回局部变量的地址是不合理的


返回引用类型:


#include<iostream>const int MAXN=1000+10;using namespace std;int &maxRef(int &x, int &y){if(x > y) return x;return y;}int main(){int a=9,b=4;cout<<maxRef(a,b)<<endl;;return 0;}/*因为函数返回类型是整型引用,所以,C++无需建立返回用的匿名对象,函数调用的返回就是对象的引用。在上述运行实例中,函数返回变量名y,而y是b的引用,所以,在main函数的调用返回时b的引用。*///函数返回需要依托于一个对象。以下定义是错误的int &f(){int tmp;//...return &tmp;}


函数指针:


1:函数类型: 

typedef  类型  函数类型名(形式参数表)

如:

typedef  double  function(double, double);

之后可以

function max,min;


2:函数指针:

定义指向一类函数的指针变量:

例:double (*fp)(double,double);

或:function *fp;

还可以用关键字typedef定义指针类型:

例:typedef double(*p)(double,double);

或:typedef function *p;

之后可以:

p p1,p2;


调用函数:

fp=max                 //获取max函数地址

x=fp(0.5, 6.7) ;

或:x=(*fp)(0.5, 6.7);


以函数作参数:

#include<algorithm>#include<cmath>#include<iostream>const int MAXN=1000+10;using namespace std;typedef double fType(double);double func(fType *f, double l, double u){double d,s=0.0;for(d=l; d<=u; d+=0.1){s+=f(d);}return s;}int main(){double sum;sum=func(sin, 0.0, 1.0);//以库函数作为参数cout<<sum<<endl;sum=func(cos, 0.0, 1.0);cout<<sum<<endl;return 0;}


内联函数:

    函数调用时,需要建立栈空间来保存调用时的现场状态和返回地址,并且进行参数传递,产生程序转移。系统完成这些工作都需要时间和空间方面的开销。因此,C++提供内联函数机制定义一些功能比较简单,代码比较短的函数。编译时,系统把内联函数的函数体嵌入到每一个函数调用处,节省了程序运行的调用开销。

    定义内联函数的方法:在函数名第一次出现时,在函数名前冠以关键字inline。






0 0
原创粉丝点击