【2020.11.22】函数指针

  • 函数指针

  • 函数指针是指向函数的指针变量,即本质是一个指针变量。

它是怎么定义的呢?

返回类型 (调用约定 *变量名)(参数列表);

例1:

//定义函数指针变量

int (__cdecl *pFun)(int, int);

//为函数指针变量赋值

//正常使用时应给予一个拥有可执行代码的地址, 这里只是举例

pFun = (int (__cdecl *pFun)(int, int))10;

//使用函数指针变量

int r = pFun(1, 2);

例2:

#include <Windows.h>

typedef int(__stdcall* _MyMessageBox)(int, LPSTR, LPSTR, int, int, int);

int main()
{
    /*
        76A0EED0 6A FF                push        0FFFFFFFFh  
        76A0EED2 6A 00                push        0  
        76A0EED4 FF 75 14             push        dword ptr [ebp+14h]  
        76A0EED7 FF 75 10             push        dword ptr [ebp+10h]  
        76A0EEDA FF 75 0C             push        dword ptr [ebp+0Ch]  
        76A0EEDD FF 75 08             push        dword ptr [ebp+8]  
        76A0EEE0 E8 3B 02 00 00       call        76A0F120  
    */
    _MyMessageBox MyMessageBox;

    MyMessageBox = (_MyMessageBox)0x76A0F120;

    MessageBoxA(0, "Hello World", "提示", 0);

    LPSTR lpText = (LPSTR)"年轻人不讲武德";
    LPSTR lpCaption= (LPSTR)"马大师";


    MyMessageBox(0, lpText, lpCaption, 0, 0, -1);


    //MyMessageBox(0, 0, 0, 0, 0, -1);

    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值