前言: 可以用指针变量指向整型变量、字符串、数组,也可以指向一个函数。
函数在编译的时候会被分配给一个入口地址,可以用一个指针变量指向函数,然后通过该指针变量调用此函数。
#include <stdio.h> int main(){ int max(int,int); int (*p)(int,int); int a,b,c; printf("enter a and b : "); scanf("%d,%d",&a,&b); p=max; /*函数名代表该函数的入口地址*/ c=(*p)(a,b); printf("max = %d\n",c); return 0; } int max(int x,int y){ int z; if(x>y)z=x; else z=y; return (z); }
函数指针变量通常的一个用途 是把指针变量作为参数 传递到其他函数(难点)
#include <stdio.h> int main(){ int max(int,int); /*函数申明*/ int min(int,int); /*函数申明*/ void process(int,int,int (*method)(int,int));/*函数申明*/ int a,b; printf("enter a and b: "); scanf("%d,%d",&a,&b); printf("max= "); process(a,b,max); printf("min= "); process(a,b,min); } int max(int x,int y){ int z; if(x>y)z=x; else z=y; return (z); } int min(int x,int y){ int z; if(x<y)z=x; else z=y; return (z); } void process(int x,int y,int (*method)(int,int)){ int result; result=(*method)(x,y); printf("%d\n",result); }
注: main函数第一次调用process函数的时候,除了将a,b作为实参,将两个整数传给process的形参x,y外,还将函数名max作为实参将其入口地址传给process函数的中的形参method(method是指向函数的指针变量)。