黑马程序员技术交流社区

标题: 函数指针 [打印本页]

作者: yaozeyang_2014    时间: 2014-3-23 09:23
标题: 函数指针
本帖最后由 yaozeyang_2014 于 2014-3-24 14:07 编辑

函数指针主要是什么情况下用的,感觉很少见的。该怎么用的
作者: agelessman    时间: 2014-3-23 09:26
函数在内存中有一个物理位置,而这个位置是可以赋给一个指针的。一零点函数的地址就是该函数的入口点。因此,函数指针可被用来调用一个函数。函数的地址是用不带任何括号或参数的函数名来得到的。
作者: 董月峰    时间: 2014-3-23 11:29
函数指针有两个用途:调用函数和做函数的参数。

eg。
#include<stdio.h>
int max(int x,int y){ return(x>y?x:y); }
int main()
{
    int (*ptr)(int, int);
    int a,b,c;
    ptr=max;
    scanf("%d%d",&a,&b);
    c=(*ptr)(a,b);
    printf("a=%d,b=%d,max=%d",a,b,c);
}
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。
不过,在某些编译器中这是不能通过的。这个例子的补充如下。
应该是这样的:
1.定义函数指针类型:
typedef int (*fun_ptr)(int,int);
2.声明变量,赋值:
fun_ptr max_func=max;
也就是说,赋给函数指针的函数应该和函数指针所指的函数原型是一致的。

eg2
#include<stdio.h>
void FileFunc()
{
    printf("FileFunc\n");
}
void EditFunc()
{
    printf("EditFunc\n");
}
void main()
{
    typedef void (*funcp)();
    funcp pfun= FileFunc;
    pfun();
    pfun = EditFunc;
    pfun();
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2