void(*)(void) 函数指针的理解

1.问题背景

之前调试某个程序的时候师哥在程序里加了这样一段函数就能正常运行了,这段

uint16 StartAddress;
void Execute()
{StartAddress=*((uint16 *)0xEFFE);( ( void(*)(void) )StartAddress )();	 //void(*)(void) 是函数指针 
}

这段程序的作用是跳转到0XEFFE地址中执行该地址中的内容

2.分析

其中出现了函数指针void(*)(void)  ,要明白函数指针首先要明白如何定义一个函数指针,那么就要先明白定义函数指针的类型是什么(比如要定义一个参数a,可以写int a,就得到一个int类型的变量a )

其实去掉函数名字就是函数的类型:

比如定义一个函数

int fun(int x, int y)

去掉函数名字fun剩下的 int (int x, int y) 就是该函数的类型,那么接下来就要使用该类型去定义一个指针,就是函数类型的指针即函数指针,按照以往定义变量的方法,一般是把类型名放在新定义的变量前面,例如int a,但是对于函数指针要按以下方式,这是定义函数类型指针的一个特殊地方

要写成int (*P) (int x, int y)  而不是int (int x, int y)

这样就得到了一个int (int x, int y)这样函数类型的指针P

那我们就用void fun(void) 这个函数的类型去定义一个函数类型的指针:

void(*P)(void);

其返回值和参数的类型与原先函数的一致,

3.回马枪

那这个void(*)(void)是个什么东西?它与void(*p)(void)和void (void)二者的区别在哪?

其实我理解这三个可以分别类比于int*    int*p   和  int    

这样就好理解了吧

void (void)   :这是一个函数的类型

void(*)(void) :这是函数指针类型 可以用于定义一个新的函数指针变量

void(*p)(void):这是用上一个函数指针类型定义了一个变量p,即得到一个返回值void和参数为void的函数指针变量p

4.总结

写的有不完整的地方大家多多指正


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部