#includeint max(int x ,int y);int main(){int (* p)() ;//定义p是指向函数的指针变量int a , b , c ;p= max ;//将函数max的入口地址赋给指针变量pscanf("%d %d" ,&a ,&b) ;c= (* p)(a , b) ;//用指向函数的指针变量p调用函数printf("a = %d , b = %d , max = %d" , a , b , c);return 0 ;}int max(int x ,int y){int k ;k= (x> y)? x : y ;return k ;}
函数名作为实际参数 :
#includeint fun1(int a , int b){return a+b ;}int fun2(int (*q)() , int x , int y){return (*q)(x , y) ;}int main(){int (*p)() , k ;p = fun1 ;k = fun2( p , 8 , 5 ) ;printf("k = %d \n" , k); //输出 13return 0 ;}
设置一个函数proc ,每次调用它会实现不同的功能 ,输入 a , b 两个数 ,第一次调用proc时,找出两者中最大者 , 第二次找出最小者 , 第三次调用求两数之差 :
#includeint max(int *x , int *y);int min(int *x , int *y);int a_b(int *x , int *y);int proc(int *x , int *y , int(*p)());int main(){int a , b ;printf("Enter a and b :");scanf("%d %d" , &a , &b);printf("a = %d \t b = %d \n" , a , b);printf("max(%d,%d) = " , a , b);proc(&a , &b , max);printf("min(%d,%d) = " , a , b);proc(&a , &b , min);printf("%d - %d = " , a , b);proc(&a , &b , a_b);return 0 ;}int max(int *x , int *y){int k ;k = (*x > *y) ? *x : *y ;return k ;}int min(int *x , int *y){int k ;k = (*x < *y) ? *x : *y ;return k ;}int a_b(int *x , int *y){int k ;k = *x - *y ;return k ;}int proc(int *x , int *y , int (*p)()){int q ;q = (*p)(x , y);printf("%d\n" , q);return 0 ;}
一个简单的主控菜单程序 , 包括 增加 , 删除 , 显示 , 退出
#include#include //字符操作#include //包含system函数void enter() ;void delete() ;void review() ;void quit() ;//void enter() , delete() , review() , quit() ;int menu();void (*option[])() = {enter , delete , review ,quit} ;int main(){int i ;while(1){i = menu();system("CLS"); //清屏函数(*option[i])(); //调用函数,执行功能system("PAUSE"); //等待输入system("CLS");}}int menu(){char select[] = {"1234EDRQedrq"};char *p , ch ; //定义数组指针应与数组数据类型一致printf("1:Enter\n");printf("2:Delete\n");printf("3:Review\n");printf("4:Quit\n");printf("Please select a number :");while(!(p = strchr(select , ch = getchar()))) //将找到的字符地址赋给指针变量p// 若没找到则 p 返回 '\0' 即 NULL , 非P 为真 执行 下列语句{putchar('\a'); // 产生响铃声printf("%c\b" , ch); //退格回显}return((p - select) % 4) ; // 返回值只可能为 0 ,1 ,2 ,3}void enter(){printf("In enter()");}void delete(){printf("In delete()");}void review(){printf("In review()");}void quit(){printf("In quit()");exit(0) ; //函数exit()使程序立即正常终止 , 通常 ,状态值 status 为 0 表示正常终止//status 为 非 0 时 为出现错误后终止程序}