返回指针类型:
#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。