函数指针是什么?
在定义一个函数之后,在编译后,系统会为函数分配一段存储空间。
指针用来保存地址的,而函数指针也是一样,只不过保存的是函数存储空间的起始地址.
- 函数指针的定义
- int (*p)(int,int);
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int add(int a, int b)
{
return a+b;
}
int minus(int a, int b)
{
return a-b;
}
int divide(int a, int b)
{
return a/b;
}
void main()
{
int (*f)(int, int); /*定义函数指针*/
f = &add; /*函数指针赋值*/
printf("add :%d\n", (*f)(4,8)); /*函数指针使用*/
f = −
printf("minus:%d\n", f(100,20)); /*也可以直接使用指针名*/
f= ÷
printf("divide:%d\n",(*f)(100,20));
}
- 函数指针作函数参数
函数指针也可以当作参数在函数之间传递
int test(int (*a)(int,int),int (*b)(int,int))
{
return 0;
}
回调函数具体见一下文章:
C语言回调函数详解(全网最全)_小熊coder的博客-CSDN博客_c语言回调函数
根据以上文章做的自测题
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int add(int a, int b)
{
return a+b;
}
int min(int a, int b)
{
return a-b;
}
int devide(int a, int b)
{
return a/b;
}
typedef struct cal /*定义结构体*/
{
int state;
char method[16];
int (*f)(int,int); /*设置回调函数*/
}cal;
cal cal_test[]=
{
{1, "add", add}, /*函数指针传参*/
{2, "min", min},
{3, "devi",devide}
};
void main(void)
{
int a = 1000;
int b = 200;
printf("sizeof(cal_test):%ld\n",sizeof(cal_test)/sizeof(cal));
for(int i = 0; i<(sizeof(cal_test)/sizeof(cal));i++) /*获取数据个数*/
{
printf("state:%d. method:%s, output:%d\n",cal_test[i].state,cal_test[i].method,cal_test[i].f(a,b)); /*直接指针名调用*/
}
}