函数指针用法

来源:互联网 发布:闪电侠第三季人工智能 编辑:程序博客网 时间:2024/05/22 12:50

函数指针实际上是个指针,只不过这个指针指向一个函数,在调用函数的时候,只要使用指向这个函数的指针就可以了。函数指针声明语法如下:

T (*the_name)([parameter_list]);

the_name便是函数指针的名字,它指向一个函数,返回类型为T,参数列表parameter_list可选,参数列表中只需列出参数类型即可,参数名字可有可无。如下例子:

int (*p_add)(int, int);

p_add这个函数指针指向一个函数,返回类型为int,参数列表是两个int类型的参数。假设有如下函数:

int add(int num1, int num2)

{

     return num1 + num2;

}

那么,p_add函数指针可以指向add()函数,两者的返回值类型、参数列表必须相同,赋值形式有两种,如下:

p_add = add; //不使用&

p_add = &add; //使用&

p_add函数指针使用方法也有两种形式,如下:

int result = p_add(1, 2); //用法同函数

int result = (*p_add)(1, 2); //这种用法更像指针

我们还可以用typedef来定义函数指针,如下:

typedef T (*the_name)([parameter_list]);

定义好了之后,就可以直接使用了:

typedef int(*p_func)(int, int);

p_func p_add = add;

p_func p_add = &add;

下面是一个具体的例子:

#include <stdio.h>int add(int, int);int minus(int, int);int multiply(int ,int);int devide(int , int);int main(void){    int (*p_add)(int, int);    int (*p_minus)(int, int);    p_add = add;    p_minus = −    printf("add:%d\n", p_add(1, 2));    printf("add:%d\n", (*p_add)(1, 2));    printf("minus:%d\n", p_minus(3, 4));    printf("minus:%d\n", (*p_minus)(3, 4));    typedef int (*p_func)(int, int);    p_func p_multiply = multiply;    p_func p_devide = &devide;    printf("multiply:%d\n", p_multiply(5, 6));    printf("multiply:%d\n", (*p_multiply)(5, 6));    printf("devide:%d\n", p_devide(7, 8));    printf("devide:%d\n", (*p_devide)(7, 8));    return 0;}int add(int num1, int num2){   return num1 + num2;}int minus(int num1, int num2){    return num1 - num2;}int multiply(int num1, int num2){    return num1 * num2;}int devide(int num1, int num2){    return num1 / num2;}


1 0