首页 > 其他 > 详细

指向函数的指针与返回指针的函数

时间:2015-05-05 10:03:51      阅读:216      评论:0      收藏:0      [点我收藏+]

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

下面具体说:

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 = example;
         bigfun(1, ptr);
bigfun2(2, example);
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、至于返回指针的函数就不再多讲了,与一般函数无二,只是返回值类型为指针而已。

指向函数的指针与返回指针的函数

原文:http://www.cnblogs.com/smellykitty/p/4478199.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!