(一)函数指针
定义:如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址称为这个函数的指针。
(二)使用函数指针变量调用函数
小例子,取最大值
#include<stdio.h> int main(){ int max(int x,int y); int (*p)(int,int); //定义指向函数的指针变量p int a=0,b=0,c=0; p=max; scanf("%d%d",&a,&b); printf("%d %d ",a,b); c=(*p)(a,b); //通过指针变量调用max函数 printf("%d",c); } int max(int x,int y){ int z; if(x>y) z=x; else z=y; return(z); }
可见,定义指向函数的指针变量的一般格式
类型名 (*指针变量名)(函数参数列表)
int (*p) (int ,int)p是指向函数的指针变量,它只能指向函数的入口而不能指向函数中间的某一条指令
(三)指向函数指针作参数
小例子,用户输入两个数a,b 当用户输入1时,取两个数的最大值;当用户输入2时,取两个数的最小值;当用户输入3时,取两数之和
定义一个fun函数,每次只要将不同的函数名作为实参将其入口地址传送给fun函数中的形参(即指向函数的指针变量)
1 #include<stdio.h> 2 int main(){ 3 int fun(int x,int y,int(*p)(int,int)); //fun函数声明 4 int max(int,int); 5 int min(int,int); 6 int add(int,int); 7 int a,b,n; 8 scanf("%d%d",&a,&b); 9 printf("选择1,2,3 "); 10 scanf("%d",&n); 11 if(n==1) fun(a,b,max); //输入1时调用max函数 12 else if(n==2) fun(a,b,min); //输入2时min函数 13 else if(n==3) fun(a,b,add); //输入3调用add函数 14 return 0; 15 } 16 int fun(int x,int y,int (*p)(int,int)){ 17 int result; 18 result=(*p)(x,y); 19 printf("%d ",result); 20 } 21 int max(int x,int y){ //取最大值 22 int z; 23 if(x>y) z=x; 24 else z=y; 25 return(z); 26 } 27 int min(int x,int y){ //取最小值 28 int z; 29 if(x<y) z=x; 30 else z=y; 31 return(z); 32 } 33 int add(int x,int y){ //求两数之和 34 int z; 35 z=x+y; 36 return(z); 37 }