参考:https://zhuanlan.zhihu.com/p/22437704
在C语言中,函数名就是表示函数的首地址,函数指针就是指向函数首地址的指针。
1. 函数地址的获取
因为函数地址就是bit数等于int的数据而已,所以有多种方法可以取得函数地址
- 指向int 的指针(int *)
int * p_function = (int *)print_something;
其语句完整的写法应该为:
int * p_function = (int *) &print_something;
编译器处理时遇到函数的名字会自动取其地址,所以&取地址符可以省略。
- int
int function_address = (int)print_something;
注意:这个编译器会有警告,可以运行,但是不推荐使用
- void *(万能指针)
void * p = print_something;
print_something省略了取地址符,这个是获取一个函数的首地址,并把它赋值给万能指针。
2. 如何根据函数的地址访问函数
```cpp
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
/** @note 定义类型函数指针,方便指针转换 */
typedef void ( * void_function_type)(void); //print_something类型的函数
void print_something(void)
{