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
函数)
执行顺序:
main
调用get_handler()
获取函数指针
main
通过函数指针调用对应模块函数(如module1_handler
)模块函数执行完毕后自动返回到调用处(即
handler(test_addrs[i])
的下一行)继续执行
main
函数的后续代码
调用栈(Call Stack):
每次函数调用时,返回地址会被压入栈中
函数执行完毕时,CPU从栈中取出返回地址跳转回去
函数指针调用和普通函数调用在返回机制上完全一样