函数指针
函数也存在地址
#include<stdio.h>
void fun()
{
prinft("fun");
}
int main()
{
prinft("fun=%p\n",&fun);
printf("fun=%p\n",fun);//输出两地址相同
fun();
(*fun)();//均输出“fun”,即均调用了函数,此时fun为函数指针
}
在函数中函数名和对函数取地址得到相同结果
int add(int a,int b)
{
return a+b;
}
int main()
{
int (*pfun)(int,int)=add;//根据函数来定义函数指针
int ret=(*pfun)(1,2);
//不能写成int ret=*pfun(1,2);,因为编译器会以为要解引用其返回
printf("%d",ret);
return 0;
}
例
int add(int a,int b)
{
return a+b;
}
int sub(int a,int b)
{
return a-b;
}
int operation(int (*pfun)(int ,int))
{
int num1=0;
int num2=0;
scanf("%d%d",&num1.&num2);
return pfun(num1,num2);
}
int main()
{
int ret=operation(sub);//执行减法,传人add执行加法
printf("%d",ret);
return 0;
}
对应函数指针的数组
int fun(char *s,const char*c)
{
}
int fun1(char *s,const char*c)
{
}
int fun2(char *s,const char*c)
{
}
int main()
{
int (*pfun[4])(char *,const char *);//数组中每一个元素都是一个函数
pfun[0]=fun;
pfun[1]=fun1;
pfun[2]=fun2;
}
转载于:https://blog.51cto.com/10797127/1722050