*6.4.2 指向函数的指针
在C语言中规定,一个函数的代码占用一段连续的内存区, 而函数名代表了该函数所占内存区的首地址。可以将函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数,然后通过该指针变量就可以调用这个函数。
指向函数的指针变量称为函数指针(变量)。
函数指针变量定义的一般形式为
类型说明符 (*指针变量名)(形参表);其中,类型说明符代表了被指向函数的返回类型;形参表表示被指向函数的形参表,可以省略形参的名字。
例如 int (*pf)( ); 表示pf是一个指向函数的指针变量,该函数的返回类型是整型,该函数是无参函数。
将函数名直接赋予指向函数的指针,指针就指向了函数,例如:
pf=out_star;
其中,out_star是一个无参的、返回类型是整型的函数。
通过指向函数的指针调用函数的方式为
(*指向函数的指针变量名)(实参表)
例如:
(*pf)( )
例6-14 利用函数指针变量形式调用求最大、最小值的函数。
用函数指针变量形式调用函数的步骤为
1)先定义函数指针变量,如例6-14程序中第16行
int (*pf)( int a,int b);
定义pf为函数指针变量。
2)将被调函数的入口地址(函数名代表该地址)赋予该函数指针变量,如程序中第20行“pf=max;”。
3)用函数指针变量形式调用函数,如程序第21行
z=(*pf)(x,y);
使用函数指针变量还应注意两点:
1)函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。
2)函数调用中“(*指针变量名)”的括号不可少。
当存在多个函数,它们的功能不同,但参数列表和返回值相同时,为了提高程序的运行效率,采用指向函数的指针不失为一种好的方法,如例6-14中第20行
pf=max;
应该特别注意的是函数指针变量和指针型函数这两者在定义和意义上的区别,如:
int (*p)( );
是一个变量说明,说明p 是一个指向函数的指针变量;而
int *p( );
是函数原型说明,说明p是(一个指针型)函数,其返回值是一个指向整型量的指针。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。