【C++】指向函数的指针与返回指针的函数

字面看就可以看出二者的区别,指向函数的指针即指针指向的地址为某个函数,而返回指针的函数为某个函数返回值是指针。

下面具体说:

1、指向函数的指针

bool (*ptr)(int a);

解析:声明指针ptr,指向的函数带有一个int形参,并返回bool型变量。注:*ptr两边的括号是必须的。否则如下:

bool *ptr(int a);

为返回指针的函数,函数名ptr,参数为int 返回bool型指针变量。

2、指向函数的指针的初始化

只能通过0或者同类型的函数或函数指针进行初始化。可以用函数直接初始化,也可以取地址。

int example(int a)
{
	cout << a << endl;
	return a;
}
int main()
{
	int (*ptr)(int a);//声明指向函数的指针类型
	ptr = 0;//用0初始化,表示不指向任何函数
	ptr = example;//同类型函数初始化 或者ptr = &example;
	ptr(2);//调用此指针即调用同函数,输出2
	(*ptr)(3);//使用解引用调用也可以,输出3
	return 0;
}


3、指针函数调用

对指针函数的调用既是对指向函数的调用,可以不需要解引用(什么叫解引用?int *p = &a; *p;其中*p表示的是p指向的地址a所存储的值,所以这里*p为解引用)

例子看上面的例子代码即可。

4、函数指针作为形参

函数的形参也可以是指向函数的指针。

两种形式表示

void bigfun(int b, int (*ptr)(int a))
{//参数为指向函数的指针
	ptr(b);
}
void bigfun2(int b, int example(int a))
{//参数为某个函数类型
	example(b);
}
int example(int a)
{
        cout << a << endl;return a;}
int main()
{
   int (*ptr)(int a);
   ptr = 0;
   ptr = example;
   bigfun(1, ptr);//输出值为1
   bigfun2(1, example);//输出值为1
   return 0;
}



5、返回指向函数的指针

既然可以作为参数,那么也可以返回

如下:int (*fun(int a))(int b);

解析:看着有点困惑,解读的话从里往外,表示一个函数名为fun,带有一个int a的形参,它的返回值是一个指向函数的指针,指向的函数是带有一个int b形参并返回int型的函数。

如果定义为typedef会容易解读

typedef int(*F)(int b);

返回F型的函数:

F fun(int a);

int example(int a)
{
	cout << a << endl;
	return a;
}
typedef int(*F)(int a);
F fun(int b)
{
	return example;
}
int main()
{
	
	int (*ptr)(int a);
	ptr = fun(2);
	ptr(3);
	return 0;
}
注: 允许将形参定义为函数类型,但函数的返回类型则必须为指向函数的指针,而不能是函数。

func为一个函数类型,不是指向函数的指针

void fun(func);//ok, func is as a parameter

func fun(int a);//error, func can't be as a return type

func *fun(int a);//ok, fun returns a pointer to func

6、至于返回指针的函数就不再多讲了,与一般函数无二,只是返回值类型为指针而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值