今天遇到了函数指针的问题,很久以前学习过这方面的内容,但是都不怎么记得了,所以今天特别重新看温习一下,温故而知新,希望对自己有所帮助!
和其他指针一样,指针指向内存中的存储地址,指向函数的指针保存着函数代码起始处的地址。
指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:
类型说明符 (*函数名)(参数)
其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明笔削和它指向函数的声明保持一致。
例如:
void (*fptr)();
把函数的地址赋值给函数指针,可以采用下面两种形式:
fptr=&Function;
fptr=Function;
表达式中的&操作符是可选的,因为函数名被使用时总是由编译器把它转换为函数指针,&操作符只是显式的说明了编译器将隐式执行的任务。
可以采用如下两种方式来通过指针调用函数:
x=(*fptr)();
x=fptr();
第二种格式看上去和函数调用无异。但是有些程序员倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数的。
但是对工作中实际使用的的一段代码心存疑问,代码如下:
函数原型为:
int assign_handler_function(const void (*handler_function)());
调用时代码为:assign_handler_function((void *)*handler_function);
handler_function的原型为:int handler_function(const int, ........);
根据我的理解,调用的代码应为 assign_handler_function((void *)handler_function), 不应该多一个*操作符,盼望高手解答!
阅读(691) | 评论(0) | 转发(0) |