c语言中,调用某个固定地址的函数

函数指针:

公式为:返回值类型 (*函数名字)(参数列表)

在某些场景中,我们必须要求程序从某一地址处开始执行,比如单片机中某些功能的地址是一成不变的,如果要使用该功能,则要从该地址执行。

假设某一地址为0x13,我们要调用该地址,则使用:

(*(void(*)())0x13)();

解析:

为了方便理解,我们改为(*(void (*name)())0x13);

  1. (void (*name)())从函数名name开始看起,name先与*结合,成为一个指针

该指针再与int ()结合,成为一个函数指针,此时(void (*name)())为一函数指针。

      2.(void (*name)())0x13 :  (void (*name)())将后面的地址0x13强制类型转换为函数指针,此时该函数指针的类型为void(*)

      3.*( void (*name)())0x13 :  对函数指针进行解应用操作,将函数指针类型转为void()

      4.(*(void (*)())0x13)() :调用该地址处的函数

对于第三步的解引用操作,个人理解为将该地址的函数指针类型与直接使用函数的指针类型相匹配,为void(),第三步可有可无,((void(*)())0x13)();效果是一样的

如果某一地址为0x13,函数返回类型为int 函数的参数也为int

调用时,可用:

(*(int(*)())0x13)(int num);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蠢 愚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值