c语言指向code指针,C语言——指向函数的指针

http://www.cnblogs.com/liangyan19910818/archive/2011/08/19/2145270.html

1 函数类型 (* 函数指针变量)() ; //指向函数的入口地址

一个函数是若干语句的集合 , 经编译后存储在函数代码存储区 , 并占有一片连续的存储空间 ,对函数指针只能用函数名赋值而无其他运算

1 #include

2

3 int max(int x ,int y);

4

5 int main()

6 {

7 int (* p)() ;//定义p是指向函数的指针变量

8 int a , b , c ;

9

10 p= max ;//将函数max的入口地址赋给指针变量p

11 scanf("%d %d" ,&a ,&b) ;

12 c= (* p)(a , b) ;//用指向函数的指针变量p调用函数

13 printf("a = %d , b = %d , max = %d" , a , b , c);

14

15 return 0 ;

16 }

17

18 int max(int x ,int y)

19 {

20 int k ;

21 k= (x> y)? x : y ;

22

23 return k ;

24 }

函数名作为实际参数 :

1 #include

2

3 int fun1(int a , int b)

4 {

5 return a+b ;

6 }

7

8 int fun2(int (*q)() , int x , int y)

9 {

10 return (*q)(x , y) ;

11 }

12

13 int main()

14 {

15 int (*p)() , k ;

16 p = fun1 ;

17 k = fun2( p , 8 , 5 ) ;

18

19 printf("k = %d \n" , k); //输出 13

20

21 return 0 ;

22 }

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

1 #include

2

3 int max(int *x , int *y);

4 int min(int *x , int *y);

5 int a_b(int *x , int *y);

6 int proc(int *x , int *y , int(*p)());

7

8 int main()

9 {

10 int a , b ;

11

12 printf("Enter a and b :");

13 scanf("%d %d" , &a , &b);

14

15 printf("a = %d \t b = %d \n" , a , b);

16

17 printf("max(%d,%d) = " , a , b);

18 proc(&a , &b , max);

19

20 printf("min(%d,%d) = " , a , b);

21 proc(&a , &b , min);

22

23 printf("%d - %d = " , a , b);

24 proc(&a , &b , a_b);

25

26 return 0 ;

27 }

28

29 int max(int *x , int *y)

30 {

31 int k ;

32

33 k = (*x > *y) ? *x : *y ;

34

35 return k ;

36 }

37

38 int min(int *x , int *y)

39 {

40 int k ;

41

42 k = (*x < *y) ? *x : *y ;

43

44 return k ;

45 }

46

47 int a_b(int *x , int *y)

48 {

49 int k ;

50

51 k = *x - *y ;

52

53 return k ;

54 }

55

56 int proc(int *x , int *y , int (*p)())

57 {

58 int q ;

59 q = (*p)(x , y);

60

61 printf("%d\n" , q);

62

63 return 0 ;

64 }

一个简单的主控菜单程序 , 包括 增加 , 删除 , 显示 , 退出

1 #include

2 #include //字符操作

3 #include //包含system函数

4

5 void enter() ;

6 void delete() ;

7 void review() ;

8 void quit() ;

9 //void enter() , delete() , review() , quit() ;

10 int menu();

11 void (*option[])() = {enter , delete , review ,quit} ;

12

13

14 int main()

15 {

16 int i ;

17 while(1)

18 {

19 i = menu();

20 system("CLS"); //清屏函数

21

22 (*option[i])(); //调用函数,执行功能

23

24 system("PAUSE"); //等待输入

25 system("CLS");

26 }

27 }

28

29 int menu()

30 {

31 char select[] = {"1234EDRQedrq"};

32 char *p , ch ; //定义数组指针应与数组数据类型一致

33

34 printf("1:Enter\n");

35 printf("2:Delete\n");

36 printf("3:Review\n");

37 printf("4:Quit\n");

38

39 printf("Please select a number :");

40

41 while(!(p = strchr(select , ch = getchar()))) //将找到的字符地址赋给指针变量p

42 // 若没找到则 p 返回 '\0' 即 NULL , 非P 为真 执行 下列语句

43 {

44 putchar('\a'); // 产生响铃声

45 printf("%c\b" , ch); //退格回显

46 }

47

48 return((p - select) % 4) ; // 返回值只可能为 0 ,1 ,2 ,3

49 }

50

51 void enter()

52 {

53 printf("In enter()");

54 }

55

56 void delete()

57 {

58 printf("In delete()");

59 }

60

61 void review()

62 {

63 printf("In review()");

64 }

65

66 void quit()

67 {

68 printf("In quit()");

69 exit(0) ; //函数exit()使程序立即正常终止 , 通常 ,状态值 status 为 0 表示正常终止

70 //status 为 非 0 时 为出现错误后终止程序

71 }

转载于:https://www.cnblogs.com/liangyan19910818/archive/2011/08/19/2145270.html

标签:return,函数,指向,int,max,void,C语言,printf,指针

来源: https://blog.csdn.net/weixin_30399155/article/details/96109976

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值