Chinaunix首页 | 论坛 | 博客
  • 博客访问: 330086
  • 博文数量: 69
  • 博客积分: 2090
  • 博客等级: 大尉
  • 技术积分: 708
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-23 09:31
文章分类

全部博文(69)

文章存档

2012年(1)

2011年(4)

2010年(48)

2009年(14)

2008年(2)

我的朋友

分类: C/C++

2010-06-12 22:13:45

函数指针-指向函数的指针

函数指针的声明
    与指向数组的指针一样,函数指针的声明也需要用使用括号。例如:
    int (*function)(int x,int y);

函数指针的用法:
    我们可以定义一个函数指针来指向函数。然后通过这个函数指针来调用函数。例如
   

#include <stdio.h>

int function(int a,int b)
{
    return a + b;
}
int (*ptr)(int a,int b);//声明函数指针


int main(int argc,char **argv)
{
    ptr = function;   //ptr指向函数function
    int a = 10;
    int b = 29;
    int d= 0;

    d = ptr(a,b);     //通过函数指针调用函数
    printf("%d\n",d);
    return 0;
}



程序的执行结果为: 39

可见通过函数指针调用函数可直接调用函数所产生的结果是一样的。

对函数指针进一步的用法如下:

#include <stdio.h>

int add(int x,int y){return x + y;}
int sub(int x,int y){return x - y;}
int mul(int x,int y){return x * y;}
int div(int x,int y){return x / y;}

int (*ptr[5])(int ,int) = {add,sub,mul,div};//定义函数指针数组

char *msg[4] = {"add:","sub:","mul:","div:"};

int main(int argc,char **argv)
{
    
    int x = 10,y = 20,i = 0;

    for(i = 0;i < 4;++i)
    {
        printf("%s %d\n",msg[i],ptr[i](x,y));
    }
    
    
    return 0;
}


程序的执行结果为;
add: 30
sub: -10
mul: 200
div: 0

对于函数指针这样的复杂类型,我們可以通过typedef来定义新的类型
typedef int fun_t(int ,int);//使用typedef来定义返回值为int,带有两个int型参数的函数类型
fun_t *ptr[4] = {add,sub,mul,div};


阅读(529) | 评论(0) | 转发(0) |
0

上一篇:内联函数

下一篇:数组指针和指针数组

给主人留下些什么吧!~~