C++语言程序设计

在Ｃ++语言中，一个函数的代码总是占用一段连续的内存区，而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称之为入口地址)赋予一个指针变量，也就是说，使该指针变量指向该函数。然后，通过指针变量就可以调用这个函数。我们把这种指向函数的指针变量称之为"函数指针变量"。如果一个指针p存放了一个函数的入口地址，我们也说指针p指向了该函数。
函数指针的声明方法是：在变量名前加一个"*"，并且将"*"和变量名用圆括号括起来，还要指明该变量指向的函数的参数类型、个数和函数的返回类型。即：
类型说明符 （*指针变量名）（参数表）；
其中"类型说明符"表示被指函数的返回值的类型。"(* 指针变量名)"中"*"后面的变量是被定义的函数指针变量名。后面括号中的"参数表"表示被指函数所带的参数。例如：
float (* funptr)(int x,int y);
这里定义了一个指向函数的指针变量funptr，所指函数带两个整型参数，返回类型为float。下面定义函数指针方法是不对的：
float * funptr(int x,int y);
实际上，这是一个函数的声明，funptr函数有两个整型参数，返回类型为指向float变量的指针。
和指向变量的指针一样，使用函数指针之前，一定要对该指针进行初始化，使它对可执行程序寻址。给函数指针初始化时，要注意指针和被指向的函数在函数参数的个数、类型及函数的返回值要匹配。
下面的例子用来说明用指针形式实现对函数调用的方法。

| 例7-13

int max(int a,int b)
{
if(a>b)return a;
else return b;
}
void main()
{
int max(int a,int b);
int(*pmax)( int a,int b);
int x,y,z;
pmax=max;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=(*pmax)(x,y);
printf("maxmum=%d",z);
}

从上述程序可以看出用，函数指针变量形式调用函数的步骤如下：
（1） 定义函数指针变量，如后一程序中第9行中的" int (*pmax)( int a,int b);"，定义 pmax为指向函数的指针变量。
（2） 被调函数的入口地址(函数名)赋予该函数指针变量，如程序中第11行 pmax=max;
（3） 用函数指针变量形式调用函数，如程序第14行 z=(*pmax)(x,y);
调用函数的一般形式为：
（* 指针变量名）（参数表）；
注意:
（1） 函数指针变量不能进行算术运算，这与数组指针变量是不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素，而函数指针的移动是毫无意义的。
（2） 函数调用中"(*指针变量名)"的圆括号不可少，其中的*不应该理解为求值运算，在此处它只是定义指针变量的一种符号。