函数指针
函数也存在地址
#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; }