函数指针的实质是指针变量。函数代码在内存中是连续分布的,函数第一段代码的地址为函数的首地址,在C中用函数名表示。
函数 void func(void);
函数指针 void (*pfunc)(void);
名为pfunc的指针,其指向一个类型为void形参列表为void的函数。
可以用以下方式进行指针绑定。
pfunc=func;
pfunc=&func;
使用时:
pfunc();
进行调用。
printf("pfunc=%p",pfunc); 输出0x1911d6
printf("&pfunc=%p",pfunc); 输出0x1911d6
可见&func与func在数值上无差异。
用strcpy()函数举例,strcpy的函数定义如下:
char *strcpy (char *dest,const char *src);
指向这个函数的函数指针可定义为:
char *(*PFunc) (char*,const char*);
PFunc=strcpy;
char a[5]={0};
PFunc(a,"abc");
typedef用于重命名类型,输出也是类型而不是变量。
typedef char* (*PType)(char *,const char *);
重命名了一种类型,这个名为为PType,类型为char *(*)(char *,const char *);
PType p3;进行定义等效于char *(*p3)(char *,const char *);
p3=strcyp;这里的PFunc指向了strcpy;
此时p3与上面的PFunc等效