C语言函数指针的使用
函数指针是指向函数的指针变量。因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型变量、实型变量一样,这里是指向函数。我们知道,C语言程序在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。
C语言函数指针的定义如下:
函数指针变量常见的用途之一是把指针作为参数传递到其他函数。指向函数的指针也可以作为参数,以实现函数地址的传递,这样就能够在被调用的函数中使用实参函数。
用指针变量引用函数:用(*指针变量名)代替函数名。例如:x=(*p)(a,b)与 x=fun(a,b)等价。
函数指针一般用于在函数中灵活调用不同函数。
1) 第 6 行:int(*p)(int,int);用来定义 p 是一个指向函数的整型指针变量,该函数有两个整型参数,函数值为整型。
注意,*p 两侧的括号不可省略,表示 p 先与 * 结合,是指针变量,然后再与后面的 () 结合,表示此指针变量指向函数,这个函数值(即函数的返回值)是整型的。如果写成 int*p(int,int),由于 () 的优先级高于 *,它就成了声明一个函数 P (这个函数的返回值是指向整型变量的指针)。
2) 第 8 行:p=max;的作用是将 max() 函数的入口地址赋给指针变量 p。
与数组名代表数组首元素地址类似,函数名代表该函数的入口地址。这时 p 就是指向 max() 函数的指针变量,此时 p 和 max() 函数都指向函数开头,调用 *p 就是调用 max() 函数。
但是 p 作为指向函数的指针变量,它只能指向函数入口处而不可能指向函数中间的某一处指令处,因此不能用 *(p+1) 来表示指向下一条指令。
3) 第 11 行:c=(*p)(a,b);说明利用 p 调用 max() 函数,相当于调用了 c=max(a,b)。
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
C语言函数指针的定义
用指针变量可以指向一个函数。函数在程序编译时被分配了一个入口地址,这个函数的入口地址就称为函数的指针。C语言函数指针的定义如下:
数据类型(*函数指针名)(形参类型表);
注意:“数据类型”说明函数的返回类型。“(*函数指针名)”中的括号不能省,若省略则整体成为一个函数说明。“形参类型表”表示指针变量指向的函数所带的参数列表。例如:int ( *p ) ( int, float);
上面的代码定义指针变量 p 可以指向一个整型函数,这个函数有两个形参,即 int 和 float。函数指针变量常见的用途之一是把指针作为参数传递到其他函数。指向函数的指针也可以作为参数,以实现函数地址的传递,这样就能够在被调用的函数中使用实参函数。
C语言函数指针的赋值
C语言函数指针的赋值形式:指针变量名=函数名;
例如:p=fun,设 fun 函数原型为 int fun(int s,float t)。用指针变量引用函数:用(*指针变量名)代替函数名。例如:x=(*p)(a,b)与 x=fun(a,b)等价。
函数指针一般用于在函数中灵活调用不同函数。
通过C语言函数指针调用函数
可以用一个指针变量指向函数,然后通过该指针变量调用此函数。下面用简单的数值比较为例。代码如下:#include <stdio.h> #include <stdlib.h> int main(void) { int max(int,int); int (*p)(int,int); //定义指向函数的指针 int a,b,c; p = max; //指向max()函数 printf("输入a和b的值\n"); scanf("%d%d",&a,&b); c = (*p)(a,b); //max()函数返回值 printf("%d 和 %d 中较大的值是 %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; }运行结果:
输入a和b的值
3 6
3 和 6 中较大的值是 6
1) 第 6 行:int(*p)(int,int);用来定义 p 是一个指向函数的整型指针变量,该函数有两个整型参数,函数值为整型。
注意,*p 两侧的括号不可省略,表示 p 先与 * 结合,是指针变量,然后再与后面的 () 结合,表示此指针变量指向函数,这个函数值(即函数的返回值)是整型的。如果写成 int*p(int,int),由于 () 的优先级高于 *,它就成了声明一个函数 P (这个函数的返回值是指向整型变量的指针)。
2) 第 8 行:p=max;的作用是将 max() 函数的入口地址赋给指针变量 p。
与数组名代表数组首元素地址类似,函数名代表该函数的入口地址。这时 p 就是指向 max() 函数的指针变量,此时 p 和 max() 函数都指向函数开头,调用 *p 就是调用 max() 函数。
但是 p 作为指向函数的指针变量,它只能指向函数入口处而不可能指向函数中间的某一处指令处,因此不能用 *(p+1) 来表示指向下一条指令。
3) 第 11 行:c=(*p)(a,b);说明利用 p 调用 max() 函数,相当于调用了 c=max(a,b)。
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。