基础篇:指针函数与函数指针int (*pf)(int );

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 总结

函数指针,是一种指针,指针指向的是函数的首地址,指向的类型是函数。

指针函数,是一种函数,函数的返回值类型是指针类型的函数。





猜你喜欢

转载自blog.csdn.net/clam_zxf/article/details/80240740
int