函数指针与指针函数仅一字之差,却是ARM开发中的易错点!掌握这个快速区分法,告别混淆!

一、本质差异:变量 vs 函数
函数指针
本质:存储函数地址的指针变量
声明:返回值类型 (*指针名)(参数列表)
例:int (*fp)(int) → 指向返回int的函数
指针函数
本质:返回指针的函数
声明:返回值类型* 函数名(参数列表)
例:int* func(int) → 返回int指针的函数
二、快速区分三板斧
看符号位置
函数指针:*在指针名前且被括号包裹 → (*fp)(int)
指针函数:*在返回类型后 → int* func()
判用途场景
函数指针:用于回调、中断处理、状态机(如STM32中断向量表)
指针函数:动态内存分配、返回数据地址(如malloc封装函数)
调用方式对比
函数指针:(*fp)(参数) → 需解引用调用
指针函数:func(参数) → 直接调用,返回值赋给指针
三、ARM开发典型应用
函数指针实战
// 中断服务例程跳转
typedef void (*ISR_Handler)(void);
ISR_Handler vec_table[] = {Reset_Handler, NMI_Handler};
vec_table[0](); // 通过指针调用复位处理函数
指针函数实战
// 动态分配内存并返回指针
uint32_t* alloc_buffer(size_t size) {
return (uint32_t*)malloc(size * sizeof(uint32_t));
}
uint32_t* buf = alloc_buffer(1024); // 获取内存块首地址
本文凡亿教育原创文章,转载请注明来源!
暂无评论