C语言:函数指针
函数指针是指指向一个函数的指针,函数其本质是一个跳转到一个代码区的地址,并把其函数调用的值压入栈,然后进行函数地址,往后执行其代码,而后返回 ,完成函数调用,所以可以暂时把函数理解为一串代码地址的入口,故可以用指针调用。
代码如下:
#include<stdio.h>
#include<stdlib.h>
void func(void) {
printf("func");
}
int main() {
void(*f)(void);//定义一个参数为空且返回为空的函数指针
printf("%p\n", func);
f = func;//进行指向
printf("%p\n", f);
f();//函数调用
system("pause");
return 0;
}
运行结果:
函数调用解剖图:
其它相同结构的函数指针其结构基本相同,如形参为Int,返回为void、等等类型。
我们来看一个比较复杂的函数指针:
一个形参为void类型,并且返回一个int*类型,形参为void的函数指针的函数
#include<stdio.h>
#include<stdlib.h>
typedef int* (*func(void))(void);/*(*func(void))表示指明返回一个函数指针,且参数为void,其int*表示这个函数指针的返回类型(void)表示这个函数指针的参数 */
typedef int*(F)(void);
int*funct(void) {
int*p = new int;
return p;
}
F*function(void) {
printf("function");
F* f=funct;
return f;
}
int main() {
func * f = function;
f();
return 0;
}