1、概念:
指针函数,全称指针型函数,是指函数返回值是指针类型的函数。
函数指针,在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存的首地址。
把函数的首地址(入口地址)赋予一个指针变量,使该指针变量指向该函数。
这种指向函数的指针变量(主语)称为“函数指针变量”。
2、定义的一般形式:
2.1 指针函数:
类型说明符 *函数名(形参表)
{
........... /*函数体*/
}
其中函数名之前加了"*"号表明,这是一个指针型函数。
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 总结
函数指针,是一种指针,指针指向的是函数的首地址,指向的类型是函数。
指针函数,是一种函数,函数的返回值类型是指针类型的函数。