C语言非常道
上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。