函数

返回指针类型:


#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。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值