函数指针:一个指针,指向的内存是函数。
- 1、普通函数指针的定义与使用
- 2、两个较为特殊的实例
- 3、指向函数的指针数组
- 4、指向函数的指针数组的行指针。
一:普通函数指针的定义与使用
#include<stdio.h> char* function(const char *t1,const char *t2) { //执行函数功能代码。。。 //返回字符指针 } int main() { char * (*func)(char *t1,char *t2); func=&function;//或者func=function直接赋值 func("hello","world"); return 0; }
//也可以通过下面的代码定义一个函数指针类型
ReturnType *(FunctionPointType*)(Parameter...)
二:两个实例的分析
#include<stdio.h> int function() { //函数功能实现代码。。。 //返回值为int } int main() { void (*p)(); *(int*)&p=(int)function;
(*p)(); return 0; }
(*(void(*) ())0)();
代码分析:将0转换成指向无参,无返回值的函数指针,取0地址内存的内容,然后调用函数。
三:函数指针数组的使用
#include<stdio.h> char* function1(char* temp) { printf("%s",temp); } char* function2(char* temp) { printf("%s",temp); } char* function3(char* temp) { printf("%s",temp); } int main() { char* (*p[3])(char* temp); p[0]=function1; p[1]=function2; p[2]=function3; p[0]("func1"); p[1]("func2"); p[2]("func3"); return 0; }
四:函数指针数组指针的使用
#include<stdio.h> #include<string.h> char* function1(const char* temp) { printf("%s",temp); return (char*)0; } char* function2(const char* temp) { printf("%s",temp); return (char*)0; } char* function3(const char* temp) { printf("%s",temp); return (char*)0; } int main() { //定义一个函数指针数组。 char* (*p[3])(const char*); //定义一个指向函数指针数组的行指针 char* (*(*pa)[3])(const char*p); pa=&p; p[0][0]=&function1; p[0][1]=&function2; p[0][1]=&function3; pa[0][0]("func1"); pa[0][1]("func2"); pa[0][2]("func3"); return 0; }
程序分析:定义了一个函数指针数组,又定义了一个指向函数指针数组的行指针,通过行指针调用函数。