📅  最后修改于: 2023-12-03 14:48:04.035000             🧑  作者: Mango
在C语言中可以定义指向函数的指针,使用typedef可以为函数指针类型定义一个名称,使其更易于使用。
假设我们有一个函数如下:
int add(int a, int b){
return a + b;
}
那么我们可以定义一个指向该函数的指针类型如下:
typedef int (*AddFuncPtr)(int, int);
定义的格式为typedef 返回类型 (*函数指针类型名称)(参数类型列表)
,其中返回类型和参数类型列表与所指向的函数类型一致,函数指针类型名称可以自定义,这里我们定义为AddFuncPtr
。
接下来,我们可以使用定义好的函数指针类型定义一个指向该函数的指针变量并对其进行赋值,如下所示:
AddFuncPtr ptr = &add;
int result = (*ptr)(1, 2); // 调用函数指针所指向的函数
函数指针变量ptr
的类型为AddFuncPtr
,它存储了一个指向函数add
的指针,可以通过该指针调用add
函数。
函数指针可以用于回调函数,下面的代码演示了如何定义一个回调函数类型和调用回调函数:
#include <stdio.h>
typedef void (*CallbackFunc)(int);
void handle(int data, CallbackFunc callback){
printf("Data received: %d\n", data);
callback(data * 2);
}
void display(int data){
printf("Data to display: %d\n", data);
}
int main(){
CallbackFunc callback = &display;
handle(123, callback); // 输出Data received: 123,Data to display: 246
return 0;
}
在上述代码中,我们定义了一个回调函数类型CallbackFunc
,它接受一个整型参数,并且不返回任何值。然后我们定义了一个处理函数handle
,它接受两个参数,一个整型数据和一个回调函数指针。handle
函数首先输出接受到的数据,然后调用回调函数,将数据乘以2之后传递给回调函数。
在主函数中,我们定义了一个回调函数变量callback
并将其指向函数display
,然后调用handle
函数,并将数据和回调函数指针作为参数传递给它。handle
函数输出Data received: 123
,然后调用callback
函数,将数据乘以2之后传递给它。display
函数输出Data to display: 246
,实现了回调函数的功能。
使用typedef定义函数指针类型可以使代码更清晰易读,同时也便于进行函数指针的操作。在使用时需要注意返回类型和参数类型列表需要与所指向的函数类型一致。