← 返回首页
C语言系列教程(二十九)
发表时间:2021-03-29 18:47:50
指向函数的指针

函数名就代表函数的首地址(也称为入口地址),如果把函数名赋值给指针变量,那么这个指针变量指向函数所在的内存区域,可以通过指针变量找到并调用该函数。这种指针就是函数指针。

1.函数指针的定义形式

returnType (*pointerName)(param list);

实例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int add(int x,int y){
   return x+y;
}

int main() {
   int x=10;
   int y=5;
   int (*fn)(int,int) = add;

   printf("x+y=%d\n",add(x,y));
   printf("x+y=%d\n",fn(x,y));
   printf("x+y=%d\n",(*fn)(x,y));
   return 0;
}

运行结果:

x+y=15
x+y=15
x+y=15

综合案例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

double add(int x,int y) {
   return x+y;
}

double sub(int x,int y) {
   return x-y;
}

double multi(int x,int y) {
   return x*y;
}

double divid(int x,int y) {
    if(y ==0) {
       return 0.0;
    } else {
      return x *1.0/ y;
   }

}

int main() {
    // 1.定义函数指针
    double (*p)(int x, int y);
    // 2.显示菜单 
    int x,y,choice;
    printf("请输入两个整数:\n");
    scanf("%d",&x);
    scanf("%d",&y);
    printf("请选择操作(1.加法 2.减法 3.乘法  4.除法):\n");
    scanf("%d",&choice);

    switch (choice) {
        case 1:
           p = add;
           break;
        case 2:
           p = sub;
           break;
        case 3:
           p = multi;
           break;
        case 4:
           p = divid;
           break;
    }
    double result = p(x,y);
    printf("the result is:%f\n",result);
    return 0;
}