1函数类型(* 函数指针变量)();//指向函数的入口地址
一个函数是若干语句的集合,经编译后存储在函数代码存储区,并占有一片连续的存储空间,对函数指针只能用函数名赋值而无其他运算
1#include<stdio.h>
2
3int max(int x ,int y);
4
5int main()
6{
7int(* p)() ;//定义p是指向函数的指针变量
8int a , b , c ;
9
10p= max ;//将函数max的入口地址赋给指针变量p
11scanf("%d %d",&a ,&b) ;
12c= (* p)(a , b) ;//用指向函数的指针变量p调用函数
13printf("a = %d , b = %d , max = %d", a , b , c);
14
15return0;
16}
17
18int max(int x ,int y)
19{
20int k ;
21k= (x> y)? x : y ;
22
23return k ;
24}
函数名作为实际参数:
1 #include <stdio.h>
2
3int fun1(int a , int b)
4 {
5return a+b ;
6 }
7
8int fun2(int (*q)() , int x , int y)
9 {
10return (*q)(x , y) ;
11 }
12
13int main()
14 {
15int (*p)() , k ;
16 p = fun1 ;
17 k = fun2( p , 8 , 5 ) ;
18
19printf("k = %d \n" , k); //输出 13
20
21return0 ;
22 }
设置一个函数proc ,每次调用它会实现不同的功能,输入 a , b 两个数,第一次调用proc时,找出两者中最大者,第二次找出最小者,第三次调用求两数之差:
1 #include <stdio.h>
2
3int max(int *x , int *y);
4int min(int *x , int *y);
5int a_b(int *x , int *y);
6int proc(int *x , int *y , int(*p)());
7
8int main()
9 {
10int a , b ;
11
12printf("Enter a and b :");
13scanf("%d %d" , &a , &b);
14
15printf("a = %d \t b = %d \n" , a , b);
16
17printf("max(%d,%d) = " , a , b);
18 proc(&a , &b , max);
19
20printf("min(%d,%d) = " , a , b);
21 proc(&a , &b , min);
22
23printf("%d - %d = " , a , b);
24 proc(&a , &b , a_b);
25
26return0 ;
27 }
28
29int max(int *x , int *y)
30 {
31int k ;
32
33 k = (*x > *y) ? *x : *y ;
34
35return k ;
36 }
37
38int min(int *x , int *y)
39 {
40int k ;
41
42 k = (*x < *y) ? *x : *y ;
43
44return k ;
45 }
46
47int a_b(int *x , int *y)
48 {
49int k ;
50
51 k = *x - *y ;
52
53return k ;
54 }
55
56int proc(int *x , int *y , int (*p)())
57 {
58int q ;
59 q = (*p)(x , y);
60
61printf("%d\n" , q);
62
63return0 ;
64 }
一个简单的主控菜单程序,包括增加,删除,显示,退出
1 #include <stdio.h>
2 #include <string.h>//字符操作
3 #include <stdlib.h>//包含system函数
4
5void enter() ;
6void delete() ;
7void review() ;
8void quit() ;
9//void enter() , delete() , review() , quit() ;
10int menu();
11void (*option[])() = {enter , delete , review ,quit} ; 12
13
14int main()
15 {
16int i ;
17while(1)
18 {
19i = menu();
20 system("CLS"); //清屏函数
21
22 (*option[i])(); //调用函数,执行功能
23
24 system("PAUSE"); //等待输入
25 system("CLS");
26 }
27 }
28
29int menu()
30 {
31char select[] = {"1234EDRQedrq"};
32char *p , ch ; //定义数组指针应与数组数据类型一致
33
34printf("1:Enter\n");
35printf("2:Delete\n");
36printf("3:Review\n");
37printf("4:Quit\n");
38
39printf("Please select a number :");
40
41while(!(p = strchr(select , ch = getchar()))) //将找到的字符地址赋给指针变量p
42 // 若没找到则 p 返回 '\0' 即 NULL , 非P 为真执行下列语句
43 {
44putchar('\a'); // 产生响铃声
45printf("%c\b" , ch); //退格回显
46 }
47
48return((p - select) % 4) ; // 返回值只可能为 0 ,1 ,2 ,3
49 }
50
51void enter()
52 {
53printf("In enter()");
54 }
55
56void delete()
57 {
58printf("In delete()");
59 }
60
61void review()
62 {
63printf("In review()");
64 }
65
66void quit()
67 {
68printf("In quit()");
69 exit(0) ; //函数exit()使程序立即正常终止,通常,状态值 status 为 0 表示正常终止
70 //status 为非 0 时为出现错误后终止程序
71 }。