目录
前言
函数指针是指向函数的指针变量,首先是指针变量,其次是指向函数入口的指针,即为函数指针。
一、指针函数与函数指针
指针函数,指的是返回值为指针的函数。eg:int *getmax(int a,int b) return p;
函数指针,指的是存放函数入口参数的指针变量。 eg: int (*p)(int a,int b) p=getmax;
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
int *func(int a,int b)/* 声明一个指针函数 */
f=func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = &func;
二、使用步骤
1.定义函数指针变量2
2.给指针传函数入口参数3
3.调用函数指针。
#include <stdio.h>
int getmax(int date1,int date2)
{
return date1>date2?date1:date2;
}
int getmin(int date1,int date2)
{
return date1>date2?date2:date1;
}
int getsum(int date1,int date2)
{
return (date1+date2);
}
int datehander(int date1,int date2,int (*pfunc)(int date1,int date2))
{
int ret=0;
ret = (*pfunc)(date1,date2); //3.调用函数指针解引用
return ret;
}
int main()
{
int date1=100;
int date2=500;
int cmd=0;
int ret=0;
int (*pfunc)(int date1,int date2); //1.定义函数指针变量
printf("请输入1求最大2求最小3求和\n");
scanf("%d",&cmd);
switch (cmd)
{ //2.给函数指针赋入口参数
case 1:
pfunc=getmax;
break;
case 2:
pfunc=getmin;
break;
case 3:
pfunc=getsum;
break;
default:
puts("输入错误请重新输入");
break;
}
ret=datehander(date1,date2,pfunc);
printf("%d\n",ret);
return 0;
}
总结
1.函数指针形参可有可无,作为函数入口。
2.函数指针不可以偏移运算 p++ p--。
3.区分函数指针和指针函数。