#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 时 为出现错误后终止程序 }