C语言——函数指针

如果在程序中定义了一个函数,
在编译时,编译系统为函数代码分配一段存储空间,
这段存储空间的起始地址(又称入口地址)称为这个函数的指针
函数名就是地址

如何定义一个函数指针变量
int getData(int a,int b)
int (*p)(int a,int b);//指针变量
int *p(int a,int b);//p是一个函数,返回指针——指针函数,返回指针值的函数

使用函数指针——函数调用概念和变量一样:
直接访问:变量名(函数名)
间接访问:指针(函数指针)

C语言函数指针的好用之处——根据程序运行过程的不同情况,调用不同的函数
/*有两个整数a和b,由用户输入1,2或3.
如果输入1,程序就给出a和b中大者
输入2,就给出a和b小者
输入3,则求a和b之和
*/

#include<stdio.h>
#include<stdlib.h>
int getMax(int data1,int data2)
{
 return data1>data2?data1:data2;
}
int getMin(int data1,int data2)
{
 return data1<data2?data1:data2;
}
int getSum(int data1,int data2)
{
 return data1+data2;
}
int datahandler(int data1,int data2,int (*pfunc)(int ,int ))
{                    //形参中可以只写个类型,定义data1,data2是因为函数运行中要用到
 int ret;
 ret =(*pfunc)(data1,data2);
 return ret; 
}
int main()
{
 int a=10;
 int b=20;
 int cmd;
 int ret;
 int (*pfunc)(int ,int );//定义一个函数指针
 
 printf ("请输入1取最大,2取最小,3取和,中的一个数\n");
 scanf ("%d",&cmd);
 switch (cmd){//根据用户的输入选择运行不同的函数
  case 1:
      pfunc=&getMax;//指针指向函数名
      break;
  case 2:
      pfunc=getMin;
   break;
  case 3:
      pfunc=getSum;
   break;
  default:
      printf ("输入错误\n");
   exit(-1);
   break ;
  
 }
 ret=datahandler(a,b,pfunc);//传参,2个整形数,1个函数
 printf ("%d",ret);
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值