C语言数据结构笔记6:函数指针的使用

今日学习函数指针的使用,直接贴出例子了就,基本也是一看就明白了:

就是能够跳转到指定函数的指针。

函数指针

#include <stdio.h>

// 1. 定义函数指针类型
//()中的 *handler_t 名称可改
typedef void (*handler_t)(int addr);

// 2. 定义三个模块的处理函数
void module1_handler(int addr) {
    printf("模块1处理地址: %d\n", addr);
}

void module2_handler(int addr) {
    printf("模块2处理地址: %d\n", addr);
}

void module3_handler(int addr) {
    printf("模块3处理地址: %d\n", addr);
}

// 3. 根据地址获取处理函数
handler_t get_handler(int addr) {
    if(addr >= 1000 && addr <= 1999) return module1_handler;
    if(addr >= 2000 && addr <= 2999) return module2_handler;
    if(addr >= 3000 && addr <= 3999) return module3_handler;
    return NULL;
}

// 4. 主程序测试
int main() {
    int test_addrs[] = {1500, 2500, 3500, 999}; // 测试地址
    
    for(int i=0; i<4; i++) {
        handler_t handler = get_handler(test_addrs[i]);
        if(handler) {
            handler(test_addrs[i]); // 调用对应的处理函数
        } else {
            printf("无效地址: %d\n", test_addrs[i]);
        }
    }
    
    return 0;
}

运行结果

跳转回来

函数执行完毕后会自动返回到调用它的地方(这里是main函数)

执行顺序:

  1. main调用get_handler()获取函数指针

  2. main通过函数指针调用对应模块函数(如module1_handler

  3. 模块函数执行完毕后自动返回到调用处(即handler(test_addrs[i])的下一行)

  4. 继续执行main函数的后续代码

  1. 调用栈(Call Stack)

    • 每次函数调用时,返回地址会被压入栈中

    • 函数执行完毕时,CPU从栈中取出返回地址跳转回去

  2. 函数指针调用和普通函数调用在返回机制上完全一样

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

NULL指向我

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

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

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

打赏作者

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

抵扣说明:

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

余额充值