函数指针总结
最近复习c语言,这里总结一下函数指针。
1.函数指针定义
首先是一般函数指针的定义:int (*funcPtr)(char *, int);
其中两个括号是不可缺少的,(*funcPtr)表明funcPtr是一个指针,(char *, int)表明func是一个函数,函数参数为char *和int,返回值为int。接下来看下一个:
int *(*funcPtr)(char *, int);
和上面的一样,两个括号说明func是函数指针,不同的是前面的int *,表明该函数的返回值为int指针。
1.1 函数指针数组
函数指针数组的定义:int *f[]; //元素为int *的数组
int (*funcPtr[])(char *, int);
[]的优先级较高,所以func是数组,里面的元素为函数指针,所指向的函数原型为int func(char *, int)。
1.2 函数指针作为参数
函数指针作为一种类型同样可以作为函数的输入与输出。void func(int x, int (*funcPtr)(char *, int));
作为输入参数时就是上面的定义,作为返回值时有点复杂了。
void (*func(int x, int y))(int);
这里括号的优先级最高,func(int x, int y)表面func是一个函数,前面的*表明返回值为一个指针,(int)说明该指针为一个参数为int的函数,void表示该函数指针的返回值为void。 上面我们定义了一个返回值为函数指针的函数,那怎么定义一个函数指针指向该函数呢,看下面:
//一步一步来写,首先他是一个函数指针
(*funcPtr)()
//指向的函数的参数为int x, int y
(*funcPtr)(int x, int y)
//指向的函数的返回值为一个指针
(*(*funcPtr)(int x, int y))
//指向的函数的返回值为一个指针,该指针是参数为int的函数指针
(*(*funcPtr)(int x, int y))(int)
//指向的函数的返回值为一个指针,该指针是返回值为void的函数指针
void (*(*funcPtr)(int x, int y))(int)
最后的那个就是指向返回值为函数指针的函数指针,分步写的话还是很清晰的。 仔细观察会发现函数指针和函数原型就差一个(*),如果知道函数原型的话将函数名改成指针就行了。
void (*func(int x, int y))(int);
void (*(*funcPtr)(int x, int y))(int);
1.3 typedef定义
另一种简单的方法是使用typedef,将函数指针定义成一种类型后,可以方便的在函数中使用。typedef void (*funcPtr1)(int);//定义返回值的函数指针
funcPtr1 (*funcPtr)(int x, int y);//这个看起来清楚多了
2. 函数指针用法
函数指针的用法很简单,可以像其他指针变量一样用*引用,也可以直接用名字调用。int f(int);
int (*pf)(int) = &f;
int x;
x = (*pf)(123);
x = pf(123);
作者:wuyuan
本文来自Wuyuan's Blog 转载请注明,谢谢!
文章地址: https://www.wuyuans.com/blog/detail/122