起因
函数的入口是地址,所以是可以用一个指针去指向这个地址的.当然刚开始使用函数指针的时候,感觉是很怪异的.多用几次就好了,要有一个适应的过程.
如何声明一个函数指针
#include <stdio.h>
//函数声明
int add(int a,int b);
int add(int a,int b)
{
return a + b;
}
int main(int agc,char *argv[])
{
//如何声明一个函数指针,假设要接收add的函数的指针
//1. 先写出接收的函数声明,改一下函数名
//int calc(int a,int b);
//2. 用括号将函数名
//int (calc)(int a,int b);
//3. 既然函数指针,是一个指针,在函数名加*号是少不了的
int (*calc)(int a,int b);
calc = add;
int sum = calc(10,20);
printf("sum=%d\n",sum);
return 0;
}
函数指针作为参数使用
#include <stdio.h>
int add(int a,int b);
int sub(int a,int b);
//函数指针作为参数
int calc(int (*fp)(int a,int b),int a,int b);
int add (int a,int b)
{
return a + b;
}
int sub(int a,int b)
{
return a - b;
}
int calc(int (* fp)(int a,int b),int a,int b)
{
return (fp)(a,b);
}
int main(int argc,char *argv[])
{
int a,b;
printf("请输入两个数(10 20)\n");
scanf("%d %d",&a,&b);
//将函数指针作为参数传入函数
printf("调用add函数结果:%d\n",calc(add,a,b));
printf("调用sub函数结果:%d\n",calc(sub,a,b));
return 0;
}
函数指针作为返回类型
#include <stdio.h>
//函数声明
int add(int a,int b);
int sub(int a,int b);
//函数声明,有三个参数,一个函数指针,剩下两个是int类型的参数
int calc(int (*fp)(int a,int b),int a,int b);
//函数指针作为函数的返回类型使用
//函数声明,返回一个有2个参数函数指针,参数为char类型
int (*selected(char c))(int a,int b);
int add(int a,int b)
{
return a + b;
}
int sub(int a,int b)
{
return a - b;
}
int calc(int (*fp)(int a,int b),int a,int b)
{
return (*fp)(a,b);
}
int (*selected(char c))(int a,int b)
{
switch(c)
{
case '+': return add;
case '-': return sub;
}
}
int main(int argc, const char * argv[])
{
printf("输入一个计算(10+20)\n");
int a,b;
char c;
int (*pf)(int ,int);
scanf("%d %c %d",&a,&c,&b);
pf = selected(c);
int sum = pf(a,b);
printf("%d %c %d = %d\n",a,c,b,sum);
return 0;
}
如果您觉得对您有用的话,可以点个赞或者加个关注,欢迎大家一起进行技术交流