#include<stdio.h>
int max(int x ,int y);
int main()
{
int (* p)() ;//定义p是指向函数的指针变量
int a , b , c ;
p= max ;//将函数max的入口地址赋给指针变量p
scanf("%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 ;
}

 

 

函数名作为实际参数 :

 

#include <stdio.h>
int 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);   //输出 13
return 0 ;
}

 

设置一个函数proc ,每次调用它会实现不同的功能 ,输入 a , b 两个数 ,第一次调用proc时,找出两者中最大者 , 第二次找出最小者 , 第三次调用求两数之差 :

#include <stdio.h>
int 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 <stdio.h>
#include <string.h>     //字符操作
#include <stdlib.h>    //包含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 时 为出现错误后终止程序
}