调用函数需要函数的参数表,返回类型,调用惯例 这三点合在一起就是函数原型;
一个函数指针包含函数的入口地址和函数原型两个方面;
例如 int add(int a,int b) 定义一个函数指针:int (* P) (int ,int);(调用惯例默认是c方式,若不是则要标出,如int (_stdcall* P) (int ,int));
使用时:P=add 或 p=&add;
C语言指针类型包含两方面信息,一是地址,存放在指针变量中;二是类型信息,关乎读写长度,没有存储在指针变量中,位于用该指针读写时的move指令中,不同的读写长度对应的mov指令不同。
关于函数指针的类型强制类型转换:与数据指针一样,函数指针在转换赋值的时候,除了赋值地址没有多余的动作。起效时是在调用函数的时候,编译器会按其原型产生不同的代码。
类中函数指针和普通的函数指针形式一样,但调用惯例和参数实际上是不一样的:
typedef void (p)(A); //调用惯例是_cdecl
typedef void(A::P)(A);//调用惯例是_thiscall,形参中还有隐藏形参this指针
老码识途 函数指针
最新推荐文章于 2023-03-17 11:02:00 发布