#include <stdio.h>
//定义函数指针结构体类型
typedef struct test
{
int (*a)(int a,int b);
void (*b)(void);
void (*c)(void);
}test;
//编写函数实现
int f1(int a,int b)
{
printf("f1:%d\n",a+b);
return a+b;
}
void f2(void)
{
printf("f2\n");
}
void f3(void)
{
printf("f3\n");
}
void f4(void)
{
printf("f4\n");
}
void f5(void)
{
printf("f5\n");
}
void (*p)(void); //定义一个函数指针变量,此时分配了内存
//定义一种新的类型,叫F_TYPE,这种类型是指向形如void f(void)函数的函数指针变量,此时还未分配内存
//以后都可以用这种类型来定义形如void f(void)函数的函数指针变量
typedef void (*F_TYPE)(void);
int main(void)
{
//定义一个test类型的aa结构体并赋值
test aa =
{
a : f1, //方法1
.b = f2, //方法2, 一般这种方式在全局变量初始化的时候常用
};
aa.c = f3; //方法3
p=f4; //函数指针变量赋值
F_TYPE q;//定义函数指针变量
q = f5; //函数指针变量赋值
int x = aa.a(1,2); //通过结构体(函数指针)调用函数 ,这种引用不需要 *
aa.b();
aa.c();
printf("f1 return %d\n",x);
(*p)(); //这种引用需要加 *
(*q)();
return 0;
}
运行结果