函数指针

函数也存在地址

#include
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;}