鱼C论坛

 找回密码
 立即注册
查看: 1740|回复: 1

[作品展示] S1E30:指针函数和函数指针

[复制链接]
发表于 2023-11-14 22:18:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. //DNX写于2023年11月14日

  3. char *getword(char c);
  4. int square(int num);
  5. int add(int a,int b);
  6. int sub(int a,int b);
  7. int mul(int a,int b);
  8. int sel(int (*fp)(int,int),int a,int b);
  9. int (*option(char))(int,int);

  10. int main()
  11. {
  12.     char in;

  13.     printf("请输入一个字母:");
  14.     scanf("%c",&in);

  15.     printf("%s\n",getword(in));//指针函数

  16.     int num;
  17.     int (*fp)(int);

  18.     printf("请输入一个整数:");
  19.     scanf("%d",&num);

  20.     fp = square;//函数名相当于函数地址

  21.     printf("%d * %d = %d\n",num,num,(*fp)(num));//函数指针

  22.     //将函数指针作为参数
  23.     int a,b;

  24.     printf("请输入a b:");
  25.     scanf("%d %d",&a,&b);
  26.     printf("%d + %d = %d\n",a,b,sel(add,a,b));
  27.     printf("%d - %d = %d\n",a,b,sel(sub,a,b));

  28.     //将函数指针作为返回值
  29.     char op;
  30.     int (*fpp)(int,int);

  31.     printf("请输入一个算式(仅支持+ - *):");
  32.     scanf("%d%c%d",&a,&op,&b);

  33.     fpp = option(op);

  34.     printf("%d %c %d = %d\n",a,op,b,sel(fpp,a,b));

  35.     return 0;
  36. }

  37. char *getword(char c)
  38. {
  39. //指针函数:使用指针变量作为函数的返回值
  40.     switch(c)
  41.     {
  42.         case 'A':
  43.         case 'a':return "Apple";break;
  44.         case 'B':
  45.         case 'b':return "Banana";break;
  46.         case 'C':
  47.         case 'c':return "Cat";break;
  48.         case 'D':
  49.         case 'd':return "Dog";break;
  50.         default:return "error";
  51.     }
  52.     //注意:不要返回局部变量的指针
  53. }

  54. int square(int num)
  55. {
  56.     return num*num;
  57. }

  58. int add(int a,int b)
  59. {
  60.     return a + b;
  61. }

  62. int sub(int a,int b)
  63. {
  64.     return a - b;
  65. }

  66. int mul(int a,int b)
  67. {
  68.     return a * b;
  69. }

  70. int sel(int (*fp)(int,int),int a,int b)
  71. {
  72.     return (*fp)(a,b);
  73. }

  74. int (*option(char op))(int,int)
  75. {
  76.     switch(op)
  77.     {
  78.         case '+': return add;
  79.         case '-': return sub;
  80.         case '*': return mul;
  81.     }
  82. }
复制代码








运行结果:
请输入一个字母:d
Dog
请输入一个整数:3
3 * 3 = 9
请输入a b:1 2
1 + 2 = 3
1 - 2 = -1
请输入一个算式(仅支持+ - *):3*5
3 * 5 = 15

Process returned 0 (0x0)   execution time : 21.742 s
Press any key to continue.








在FishC学C的第十五天
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-15 13:09:26 From FishC Mobile | 显示全部楼层
加油吖,一起进步
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 07:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表