1. 函数指针和函数指针变量
在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。
所以说函数名也是一个指针,可以和数组名相对照起来。
我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数——函数指针变量
2. 函数指针变量声明
类型说明符 (*指针变量名)();
如:int(*pFunc)( int a, int b );
3. 函数指针变量赋值
int Max( int a, int b )
{
return a>b? a:b;
}
有多种赋值方式:
pFunc = Max;
pFunc = &Max;
4. 函数指针变量调用
Max函数的有2种调用方式:
int max = Max(10, 20);
int max = (*Max)(10, 20);
那么同理函数指针变量也有两种方式:
int max = pFunc(10, 20);
int max = (*pFunc)(10, 20);
所以说函数指针变量有4种使用方式:
pFunc = Max;
max = pFunc(10,20);
printf("Max data is :%d\n", max);
pFunc = Max;
max = (*pFunc)(10,20);
printf("Max data is :%d\n", max);
pFunc = &Max;
max = pFunc(10,20);
printf("Max data is :%d\n", max);
pFunc = &Max;
max = (*pFunc)(10,20);
printf("Max data is :%d\n", max);
5. typedef a function pointer
void MyFun(int x); //此处的申明也可写成:void MyFun( int );
typedef void (*FunType)(int ); //这样只是定义一个函数指针类型
FunType FunP; //然后用FunType类型来申明全局FunP变量
如果看不懂的话,对照一下:
typedef int* PINT; //为int* 类型定义了一个PINT的别名
PINT pi = &a;