一.什么是函数指针:
函数指针本质上也是指针,我们所写函数代码在内存中会被分配一段专门的储存空间,这段储存空间的地址就是函数的地址,既然是地址,就可以用指针去表示,自然就有了函数指针。
二.函数指针的用法:
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;
}