#include <stdio.h>
#include <stdlib.h>
void (*pfun)(int data);
void myfun(int data)
{
printf(“get data:%d\n”,data);
}
int main(int argc,char *argv[])
{
pfun = myfun;
(*pfun)(100);
return 0;
}
从这个例子可以看到,我们首先定义了一个函数指针pfun ,
这个函数指针的返回值为void型,然后我们给函数指针赋值,赋值为myfun,
也就是myfun函数的首地址,在C99中myfun函数名就是myfun函数的首地址,
此时pfun获得了myfun的地址,pfun的地址等于myfun的地址,所以最终调用pfun();也就相当于调用了myfun();
第二种用法:typedef 原变量类型 别名
也可以用typedef来定义一个指针函数这样使在大型代码中更加简洁
#include <stdio.h>
#include <stdlib.h>
typedef void (*pfun)(int data);
/typedef的功能是定义新的类型。第一句就是定义了一种pfun的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回void类型。/
void myfun(int data)
{
printf(“get data:%d\n”,data);
}
int main(int argc,char argv[])
{
pfun p= myfun; //函数指针指向执行函数的地址
p(100);
return 0;
}
这里面的pfun代表的是函数的类型,通过pfun来代表void ()(int)函数类型即pfun是指针函数的别名,pfun p相当于定义了一个
void (*p)(int)函数指针。p = myfun可以理解为将函数指针p指向myfun函数的地址,p(100);相当于执行myfun(100);
第三种用结构体函数指针的方法
#include <stdio.h>
#include <stdlib.h>
typedef struct gfun{
void (*pfun)(int);
}gfun;
void myfun(int data)
{
printf(“get data:%d\n”,data);
}
int main(int argc,char *argv[])
{
gfun gcode={
.pfun = myfun, //将函数指针指向要调用函数的地址
};
gcode.pfun(100);
return 0;
}