首先来看一段关于函数指针的代码:
#include<stdio.h>
int func(char *);
int main(int argc,char *argv[])
{
int (*pFunc)(char *s);
pFunc = func;
pFunc("Hello");
return 0;
}
int func(char *s)
{
printf("%s\n",s);
return 0;
}
这段代码的第5行就是定义一个名字叫做pFunc的函数指针,它指向一个返回值为int,参数为char*的函数。然后我们把这两条语句比较一下:
int (*pFunc)(char*s);
int a;
我个人在这里理解认为可以将第一条中的int(*)(char *)当作一个类似于int的变量声明来看待,然后把pFunc当作类似于a的一个标识符。
有了这个理解我们再来看这两条语句:
typedef int a;
typedef int(*pFunc)(char *);
第一条语句将a声明为变量int的一个别名,同样,那么也可以将第二条语句中的pFunc视作是int(*)(char *)的一个别名!
Ok,接下来我们就可以来看一下这段代码了!
#include<stdio.h>
typedef int (*pFunc)(char *);
pFunc pfunc;
int func(char *);
int main(int argc,char *argv[])
{
pfunc = func;
pfunc("Hello");
return 0;
}
int func(char *s)
{
printf("%s\n",s);
return 0;
}
这段代码的第二行相当于是新定义了一种变量pFunc,它的功能是定义函数指针!它定义了一个函数指针pfunc,然后让这个指针指向函数func,最后再来通过pfunc来调用函数func!
看完上面那个,大家可以看一个更加变态的!
#include<stdio.h>
typedef int Func(char *);
Func *pfun;
int func(char *s);
int main(int argc,char *argv[])
{
pfun = func;
pfun("Hello");
return 0;
}
int func(char *s)
{
printf("%s\n",s);
return 0;
}
这里我有一种更加极端的思想,那就是函数也是变量!第二行那个代码新定义了一种变量类型Func,这种变量类型定义出来的变量就是一个返回值为int,参数为char*的函数,那么Func*产生的就是指向这样一种变量的指针!也就是函数指针!