8.5.1 什么是函数的指针
每次调用函数时都从该地址入口开始执行此段函数代码。函数名代表函数的起始地址。
8.5.2 用函数指针变量调用函数
例8.22 用函数求整数a和b中的大者
解题思路:在主函数调用max函数,除了可以通过函数名调用外,还可以通过指向函数的指针变量来实现。
#include<stdio.h> int main(){ int max(int,int); //函数声明 int a,b,c; printf("please enter a and b:"); scanf("%d,%d,&a,&b"); c=max(a,b); //通过函数名调用max函数 printf("a=%d\nb=%d\nmax=%d\n"a,b,c); return 0; } int max(int x,int y){ int z; if(x>y) z=x; else z=y; return(z); }
(2)通过指针变量调用它所指向的函数
#include<stdio.h>{ int main(){ int max(int,int); //函数声明 int(*p)(int,int); //定义指向函数的指针变量p int a,b,c; p=max; printf("please enter a and b:"); scanf("%d,%d",&a,&b); c=(*p)(a,b); //通过指针变量调用max函数 printf("a=%d\nb=%d\nmax=%d\n",a,b,c); return 0; } int max(int x,int y){ int z; if(x>y) z=x; else z=y; return(z); } }
8.5.3 怎样定义和使用指向函数的指针变量
类型名(*指针变量名)(函数参数表列)
(1)定义指向函数的指针变量,并不意味着这个指针变量可以指向任何函数,它只能指向在定义时指定的类型的函数。
(2)如果要用指针调用函数,必须先使指针变量指向该函数。
(3)在给函数指针变量赋值时,只须给出函数名而不必给出参数。
(4)用函数指针变量调用函数时,只须将(*p)代替函数名即可。
(5)对指向函数的指针变量不能进行算术运算,如p+n,p++,p--等运算是无意义的。
(6)用函数名调用函数,只能调用所指定的一个函数。
8.5.4 用指向函数的指针作函数参数
指向函数的指针变量的一个重要用途是把函数的入口地址作为参数传递到其他函数。