函数指针
函数指针用来存放函数地址,这个地址就是一个函数的入口
函数名代表函数的入口地址
一般形式:
<数据类型> (*<函数指针名称>) (<参数说明列表>);
int *power (int a);
数据类型是函数指针所指函数的返回值类型
参数说明列表应该与函数指针所指函数形参保持一致
函数指针名称中,*说明是指针不可缺少的,意为函数指针
#include <stdio.h>int add(int,int);int main()
{int a=1;int b=2;int (*p) (int,int);p=add;printf("result = %d\n",add(a,b));printf("result = %d\n",(*p)(a,b));return 0;
}int add(int a,int b)
{return a+b;
}
运行程序会发现,函数指针本质上跟前面学的指针没什么区别,只是所指对象的区别。定义了一个函数指针,并指向add这个函数的地址,在输出结果时,既可以通过函数add,也可以通过指针*p。当主函数内部大量调用函数,可以通过指针的方式简化程序。
函数指针数组
函数指针数组和之前的指针数组类似。指针数组是存放指针的数组,函数指针数组是存放函数指针的数组。
一般形式:
<数据类型> (*<函数指针数组名>) (<大小>) (<参数说明列表>)
大小:函数指针数组元素个数。其余部分与普通函数指针一样。
#include <stdio.h>int add(int ,int);
int sub(int,int);int main()
{int a=3;int b=1;int (*p[2])(int,int);p[0]=add;p[1]=sub;printf("result=%d\n",add(a,b));printf("result=%d\n",(*p[0])(a,b));printf("result=%d\n",(*p[1])(a,b));return 0;
}int add(int a,int b)
{return a+b;
}int sub(int a,int b)
{return a-b;
}