1.函数指针概念 在C语言中,一个函数总是占用一段连续的内存空间。而函数名就是该函数所占内存空间的首地址。 我们可以把函数的这个首地址(或称入口地址)赋予一个指针,使该指针变量指向该函数,然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针称为“函数指针变量”
2.函数指针定义方法 一般形式为: 函数的声明: 返回值类型 (*变量名)(函数的参数列表); 例如: - int test(int a,int b){
- return a + b;
- }
- //定义了一个函数指针
- //p可以存放返回值类型是int,且有两个形参,形参类型都是int类型的函数的地址
-
- int main(int argc, const char * argv[])
- {
-
- int a = 10,b = 9;
- //定义了一个函数指针
- //p可以存放返回值类型是int,且有两个形参,形参类型都是int类型的函数的地址
- int (*p)(int a, int b);
- p = test;
- return 0;
- }
-
复制代码
3.函数指针的使用 例如: - #include <stdio.h>
- //return a + b
- int add(int a, int b){
- return a + b;
- }
- //return a - b
- int sub(int a, int b){
- return a - b;
- }
- //return a * b
- int mul(int a, int b){
- return a * b;
- }
- //return a / b
- int divd(int a, int b){
- return a / b;
- }
-
- int main(int argc, const char * argv[])
- {
-
- int a = 10,b = 9;
- //定义了一个函数指针
- //p可以存放返回值类型是int,且有两个形参,形参类型都是int类型的函数的地址
- int (*p)(int a, int b);
- //根据b的不同取值,使p指向不同的函数,这样可以是代码更清晰简洁。
- switch (b) {
- case 0:
- case 1:
- case 2:
- case 3:
-
- p = sub;
- break;
- case 4:
- case 5:
- case 6:
- p = add;
- break;
- case 7:
- case 8:
- p = mul;
- break;
- default:
- p = divd;
- break;
- }
-
- printf("result = %d", p(a, b));
- return 0;
- }
复制代码
4.注意事项 1)函数指针变量不能进行算术运算,这是与数组指针变量不同的地方。数组指针变量加减一个整数可使指针移动指向后面或者前面的数组元素,而函数指针的移动式毫无意义的。 2)函数调用中“(*指针变量名)”的两边的括号不可少,其中的*不应该被理解为求值运算,此处它只是一种表示符号。
|