上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.4 指向函数的指针
按照C语言的规定,一元&运算符的操作数必须是左值或者函数指示符。如果是一个左值,则一元&运算符的结果是指向变量的指针;如果是一个函数指示符,则一元&运算符的结果是指向函数的指针。
然而,函数类型是多种多样的,返回类型和参数类型不同的函数是不同的函数类型。相应地,如果两个指针所指向的函数类型不同,则它们是不同的指针类型。下面的程序演示了如何在程序中使用指向函数的指针。
/*****************c0403.c***************/ void swap_ab(int * a, int * b) { int temp = * b; * b = * a; * a = temp; } int main(void) { int m = 10086, n = 10010; swap_ab(& m, & n);
void(* pf)(int *, int *)= swap_ab; pf(& m, & n); }
这个程序的意图是用函数swap_ab交换两个变量的值,但是用了两种不同的方法。在main函数里,我们首先声明了变量m和n并分别初始化为10086和10010,这没有什么好说的。接下来,我们调用函数swap_ab来交换这两个变量的存储值。
现在我们来看函数swap_ab的声明,该函数具有两个参数a、b且它们的类型都是指向int的指针,函数的功能是交换这两个指针所指向的变量的值。由于功能简单,该函数没有什么可返回的,所以不返回任何值。在第1章里我们讲过,如果一个函数不返回值,则它的返回类型必须声明为void。