1、概念:
指针函数,全称指针型函数,是指函数返回值是指针类型的函数。
函数指针,在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存的首地址。
把函数的首地址(入口地址)赋予一个指针变量,使该指针变量指向该函数。
这种指向函数的指针变量(主语)称为“函数指针变量”。
2、定义的一般形式:
2.1 指针函数:
类型说明符 *函数名(形参表)
{
........... /*函数体*/
}
扫描二维码关注公众号,回复:
1158852 查看本文章
其中函数名之前加了"*"号表明,这是一个指针型函数。
2.2 函数指针:
类型说明符 (*指针变量名)();
例如:int (*pf)(int );
3、举例说明:for example
3.1 指针函数的sample
#include <stdio.h> #include <math.h> #include <stdlib.h> /* char *day_name(int n); int main() { int i; char *day_name(int n);//定义函数返回值是指针类型的函数 printf("input Day No:\n"); scanf("%d",&i); if(i < 0 ) exit(1); printf("Day No:%2d-->%s\n",i,day_name(i));//调用指针函数 return 0; } char *day_name(int n){ //静态指针数组 static char *name[] = { "Illegal day", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; return((n <1 || n>7 )? name[0]:name[n]); } */ char *day_name(char *name[],int n) { char *pp1,*pp2; pp1 = *name; pp2 = *(name + n); return ((n<1 || n>7)? pp1:pp2); } int main() { static char *name[] = { "Illegal day", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; char *ps; int i; char *day_name(char *name[],int n); printf("input Day No:\n"); scanf("%d",&i); if(i < 0) exit(1); ps = day_name(name,i); printf("Day No:%2d-->%s\n",i,ps); return 0; }
3.2 函数指针sample
int max(int a,int b) { if(a>b)return a; else return b; } main(){ int max(int a,int b); int(*pmax)(int, int);//定义参数列表为(int,int)的函数指针 int x,y,z; pmax=max;//将函数指针pmax ->指向函数max 的函数入口地址(首地址) printf("input two numbers:\n"); scanf("%d%d",&x,&y); z=(*pmax)(x,y); //等同于调用函数max(x,y); printf("maxmum=%d",z); }
4. conclusion 总结
函数指针,是一种指针,指针指向的是函数的首地址,指向的类型是函数。
指针函数,是一种函数,函数的返回值类型是指针类型的函数。