函数指针的定义

在将程序装入内存后,每个函数都要占用一段连续的内存区域,而函数名就是这段内存
区域的首地址(或称函数的入口地址)。可以把某个函数首地址赋给一个指针变量,使
之指向该函数,然后通过这个指针变量调用该函数。习惯上把这种指向函数的指针变量
称为函数指针变量,简称函数指针。
定义函数指针变量的一般形式:
类型标识符(* 指针变量名)(类型标识符1,类型标识符2…);
其中第一个类型标识符表示被指函数返回值的类型,圆括号内的类型标识符用以说明所
指函数的参数个数和参数的类型,这些类型标识符应与所指函数参数的类型一一对应。
如果所指函数没有形参,这一圆括号也不可省略。比如:

int( * pf)(int,int *);

表示pf是一个指向函数的指针变量,所指向函数的返回值必须是整型,且具有两个参数,
依次为整型和指向整型的指针。
用函数指针变量来调用函数的一般形式为:
(* 指针变量名)(实参表)
下面用例子说一下,用函数指针变量调用函数。

#include <stdio.h>
int max(int a,int b)
{
	if(a>b)
		return a;
	else
		return b;
}
int main()
{
	int max(int a,int b);
	int (*pmax)(int,int);		/* pmax是一个指针变量,指向返回值为整型的函数*/
	int x,y,z;
	pmax=max;					/* pmax指向函数max*/
	printf("input two numbers:\n");
	scanf("%d %d",&x,&y);
	z=(*pmax)(x,y);				/*调用pmax所指函数max,返回一个整型值,赋给z*/
	printf("maxnum=%d\n",z);
	return 0; 
}

程序运行结果如下:
input two numbers:
3 5
maxnum=5
使用函数指针变量还应注意以下两点:
(1)函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减
一个整数可使指针移动,指向数组的其他元素,而函数指针的移动是毫无意义的。
(2)函数调用调用中“(*指针变量名)”两边的括号不能少,其中的“ * “不应该理解为指针
运算符,在此处它只是一种指示符号。

猜你喜欢

转载自blog.csdn.net/qq_43873385/article/details/89521186
今日推荐