首页 > 技术文章 > 函数指针

lnleelove 2018-10-07 22:23 原文

1、基本的函数指针

定义:函数存储空间的起始地址(入口地址)成为这个函数的指针

写法: int (*p)(int x, int y)
            这里指的就是定义了一个指向函数的指针变量p
示例:int max(int,int);
           int (*p)(int,int);
           p=max;
           int num;
           num=(*p)(1,2);  // 此处与num=max(1,2)的效果一致。
                                    // max内的具体函数内容此处不写
 
注意:1、int (*p)(int x, int y) 不能写成 int *p(int x, int y),()的运算级别比*高
                 如果写成去掉括号的形式,则变成函数p(int x, int y)的返回值是 int型的指针
           2、此例子中,p只能是指向函数起始地址,但是不能进行运算,不能通过运算进行执行指令的偏移
           3、指针变量不意味着它可以指向任何变量,返回值类型和形参个数与形参类型要一样才可行
 
2、函数指针作形参
把指向函数指针的函数作为形参:每次函数调用其他函数时,可以采用一个函数,调用不同的函数
                                                       这种做法有利于结构化程序的开发
int fun( int x, int y,int (*p)(int, int) )
int max(int, int);
int min(int, int);
fun(1,2,max);   // 进行指针函数的传递,传递函数的入口地址
……
int fun(int x, int y, int (*p)(int, int))
{
int result;
        result=(*p)(x,y);  // 在函数中使用传入的指针函数
        return 0;
}

推荐阅读