函数指针和函数指针数组

朱雀 2021-09-07 06:10 563阅读 0赞

文章目录

  • 一、函数指针
  • 二、函数指针数组
  • 三、应用:两个数的加减乘除运算
  • 感谢阅读,如有错误请批评指正

一、函数指针

数据在内存中都有自己的地址,地址需要指针变量来保存,我们常见的指针有char* 、int* 、double*、float*。

函数也有自己的地址,保存函数的地址的变量就是函数指针。但函数指针的形式较为复杂,下面举几个例子来说明函数指针的形式。

  1. void (* pfun1)();

pfun1 先和 * 结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void。

  1. int(* pfun2)(int, int);

pfun2先和 * 结合,说明pfun2是指针,指针指向的是一个函数,指向的函数参数为int、int,返回值为int。

  1. double(* pfun3)(int, char);

pfun3先和 * 结合,说明pfun3是指针,指针指向的是一个函数,指向的函数参数为int、char,返回值为double。

二、函数指针数组

数组是用来存放多个相同类型变量的

  1. int a[10];//数组有10个元素,每个元素类型为int
  2. char ch[5];//数组有5个元素,每个元素类型为char
  3. double d[20];//数组有20个元素,每个元素类型为double

同理,函数指针数组就是存放多个函数指针的数组,但它的形式较为复杂。

  1. int (*parr1)[10](int, int);
  2. //含有10个元素的数组,每个元素为函数指针
  3. //且函数指针指向的函数参数为int、int,返回值为int。
  4. double (*parr2)[5](int, char);
  5. //含有5个元素的数组,每个元素为函数指针
  6. //且函数指针指向的函数参数为int、char,返回值为double。

三、应用:两个数的加减乘除运算

将加减乘除分别封装成四个函数,在main函数中调用。

  1. int ADD(int x, int y)
  2. {
  3. return x + y;
  4. }
  5. int SUB(int x, int y)
  6. {
  7. return x - y;
  8. }
  9. int MUL(int x, int y)
  10. {
  11. return x * y;
  12. }
  13. int DIV(int x, int y)
  14. {
  15. return x / y;
  16. }
  17. int main()
  18. {
  19. int x, y, input, ret;
  20. int(*pfArr[])(int, int) = { 0, ADD,SUB, MUL, DIV };
  21. //0只是为了下面调用函数是方便,不放也可以
  22. //函数指针数组,内部的四个函数指针指向的函数类型相同,
  23. //参数为int、int,返回值为int。
  24. do
  25. {
  26. printf("0.退出\n1.加\n2.减\n3.乘\n4.除\n");
  27. scanf("%d", &input);
  28. if (0 == input)
  29. {
  30. printf("退出\n");
  31. }
  32. else if (input >= 1 && input <= 4)
  33. {
  34. printf("请输入两个数");
  35. scanf("%d%d", &x, &y);
  36. printf("%d\n", (pfArr[input](x, y)));
  37. //如(pfArr[1](1, 2))就是调用数组下标为1的元素,
  38. //在这里是调用ADD函数,并用1和2进行运算
  39. //即对1和2进行加法运算
  40. }
  41. else
  42. {
  43. printf("输入错误,重新输入\n");
  44. }
  45. } while (input);
  46. }

感谢阅读,如有错误请批评指正

发表评论

表情:
评论列表 (有 0 条评论,563人围观)

还没有评论,来说两句吧...

相关阅读