目录
函数指针概念
在C/C++中,指向函数的指针变量称为函数指针,函数指针用于存放函数的地址,作为函数执行时入口地址。函数名代表函数的入口地址。
函数指针变量定义的一般形式如下
<返回数据类型> (*函数指针名称) (函数参数列表);
本质上和定义函数的首部相同,但用指针的形式来定义,函数指针名需要有括号,否则变成了一个返回值是指针的函数声明。
函数指针用法
#include <stdio.h>
typedef int (*psum)(int a, int b);//通过typedef定义函数指针类型别名
int sum1(int a, int b)
{
printf("%s, result : %d\n", __FUNCTION__, a+b);
return (a + b);
}
int sum2(int a, int b)
{
int sum = a + b;
printf("%s, result : %d\n", __FUNCTION__, sum);
return sum;
}
int main()
{
psum psum_v1 = sum1;//通过函数指针类型定义变量并赋值
int (*psum_v2)(int a, int b) = sum2;//直接定义函数指针变量并赋值
int test1 = 10, test2 = 15;
psum_v1(test1, test2);
psum_v2(test1, test2);
return 0;
}
运行效果如下
函数指针数组
#include <stdio.h>
typedef int (*psum)(int a, int b);//通过typedef定义函数指针类型别名
int sum1(int a, int b)
{
printf("%s, result : %d\n", __FUNCTION__, a + b);
return (a + b);
}
int sum2(int a, int b)
{
int sum = a + b;
printf("%s, result : %d\n", __FUNCTION__, sum);
return sum;
}
//function pointer array1
psum fp_arr1[] = { sum1 , sum2 };//通过函数指针类型定义函数指针数组
int main()
{
//function pointer array2
int (*fp_arr2[])(int a, int b) = {sum1 , sum2};//直接定义函数指针变量并赋值
int test1 = 10, test2 = 15;
int i;
for (i = 0; i < 2; i++)
{
printf("function pointer array1:\n");
fp_arr1[i](test1, test2);
printf("function pointer array2:\n");
fp_arr2[i](test1, test2);
}
return 0;
}
运行效果
回调函数
下节讲述如何通过函数指针实现回调函数