函数指针实际上是个指针,只不过这个指针指向一个函数,在调用函数的时候,只要使用指向这个函数的指针就可以了。函数指针声明语法如下:
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; }
时间: 2024-11-13 05:30:45