当前位置: 首页 > news >正文

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. 函数指针调用和普通函数调用在返回机制上完全一样

 

http://www.dtcms.com/a/299650.html

相关文章:

  • 5. 流程控制语句
  • 哈希指针与数据结构:构建可信数字世界的基石
  • 记一次腾讯云临时密钥接管存储桶
  • obd运维OceanBase数据库的常见场景
  • C++11特性详解(上)
  • 解决使用vscode连接服务器出现“正在下载 VS Code 服务器...”
  • 实现网页访问/接口调用KernelMemory
  • cacti的命令执行和回显
  • 八股文整理——计算机网络
  • 【数据结构】队列和栈练习
  • HTTPS的基本理解以及加密流程
  • Nestjs框架: 基于Mongodb的多租户功能集成和优化
  • 顶顶通呼叫中心系统之创建与注册分机
  • 矩阵乘法计算
  • 安德鲁·卡帕西:深入探索像ChatGPT这样的大语言模型
  • 免费 PDF 转 Word 工具:无水印 / 支持批量转换,本地运行更安全【附工具下载】
  • Ubuntu系统 系统盘和数据盘扩容具体操作
  • 【第二章-数据的表示和运算】
  • vulhub Web Machine(N7)靶场攻略
  • 详解力扣高频SQL50题之1193. 每月交易 I【简单】
  • 数据恢复与备份
  • RS485转Profinet网关配置指南:高效启动JRT激光测距传感器测量模式
  • SpringMVC相关基础知识
  • HTML5 Canvas 绘制圆弧效果
  • Centos安装HAProxy搭建Mysql高可用集群负载均衡
  • 力扣112. 路径总和
  • 面试150 回文数
  • React状态管理——Dva
  • React入门指南——指北指南(第二节)
  • LeetCode——面试题 05.01 插入