一.什么是函数指针:
函数指针本质上也是指针,我们所写函数代码在内存中会被分配一段专门的储存空间,这段储存空间的地址就是函数的地址,既然是地址,就可以用指针去表示,自然就有了函数指针。
二.函数指针的用法:
1.首先明确函数指针怎么申明。形如:返回值类型 (*变量名)(参数类型1,参数类型2,。。。)
例如
int (*p) (int,int)
2.我们还需要了解如何通过指针调用函数。
(*p)(3,5);
3.如何给该类型的指针赋值:
非常简单,直接将函数名赋给指针即可,因为函数名即为函数的首地址,这样的赋值顺理成章。
例如:
int Func(int x); /*声明一个函数*/ int (*p) (int x); /*定义一个函数指针*/ p = Func; /*将Func函数的首地址赋给指针变量p*/
4.请看一下完整的用法:
# include <stdio.h> int Max(int, int); int main(void) { int(*p)(int, int); 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; }
5.特别注意:
请一定要分清楚指针函数和函数指针的区别。指针函数是指一个函数的返回值类型为指针。下面请看一段代码来了解指针函数:
#include <stdio.h> #include <stdlib.h> #include <string.h> char *InitMemory() //指针函数 { char *s = (char *)malloc(sizeof(char) * 32); return s; } int main() { char *ptr = InitMemory(); strcpy(ptr, "helloworld"); printf("%s\n", ptr); free(ptr); return 0; }