函数指针数组
<数据类型> ( * <函数指针数组名称> [<大小>] ) ( <参数说明列表> );
int (*fun[10])(int);
// 因为[] 的优先级比*高 , func先结合[] , 因此func是一个数组
// 此时的* 就是起到了修饰的作用 , 这个数组就是 指针类型的数组
// 什么类型的指针呢?
// 是函数类型的指针 , 返回值int , 形参是int 的函数
// 最终是:函数类型指针数组, 简称函数指针数组
实例94
01-cbase\94-function.c
#include
#include
// 函数使用的三个步骤
// 2. 函数的声明
// 函数定义在main之前, 可以省略声明部分
// 1. 函数定义
// 函数定义的三要素 函数名 , 形参 , 返回值
// 函数名 : add
// 形参 : int x , int y
// 返回值 : int
int add(int x, int y)
{
return x+y ;
}
int sub(int x, int y)
{
return x-y;
// ...
}
int mul(int x, int y)
{
return x*y;
// ...
}
int div(int x, int y)
{
return x/y;
// ...
}
// x^y 计算次方 使用pow函数来计算
int mypow(int x, int y)
{
return (int)pow(x,y);
// ...
}
int main(int argc, char const *argv[])
{
// 3. 函数的调用
// 先定义个函数指针数组
int (*pfunc[5])(int x, int y) ; // 定义一个数组, 里面有5个元素, 每一个元素都是一个函数指针变量
pfunc[0] = add;
pfunc[1] = sub;
pfunc[2] = mul;
pfunc[3] = div;
pfunc[4] = mypow;
for(int i=0;i<5;i++)
{
printf("pfunc[%d]=%p\n",i,pfunc[i]);
}
int a=10,b=5,ret=0;
for(int i=0;i<5;i++) // 可以使用for循环来批量调用函数
{
//i=0 , pfunc[0] = add, 相等于 add(a,b);
//i=1 , pfunc[1] = sub, 相等于 sub(a,b);
//i=2 , pfunc[2] = mul, 相等于 mul(a,b);
//i=3 , pfunc[3] = div, 相等于 div(a,b);
//i=4 , pfunc[4] = mypow, 相等于 mypow(a,b);
ret = pfunc[i](a,b);
printf("ret=%d\n",ret);
}
return 0;
}
pfunc[0]=0000000000401550
pfunc[1]=0000000000401564
pfunc[2]=0000000000401576
pfunc[3]=0000000000401589
pfunc[4]=000000000040159C
ret=15
ret=5
ret=50
ret=2
ret=100000