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

函数指针和指针函数的核心区别

一、区别

指针函数:返回指针的函数,即函数的返回类型是指针类型,返回动态分配的内存地址或数组首地址

类型* 函数名(参数列表){//函数体return 指针;
}

函数指针:本质是指针变量,存储函数的入口地址,用于间接调用函数。

返回值类型 (*指针变量名)(参数类型列表);

核心区别对比:

指针函数与函数指针的区别
特性指针函数函数指针
本质函数(返回值为指针)指针(指向函数入口地址)
​声明语法int* func(int a); int (*func)(int a);
典型用途动态内存分配、返回数组/结构体地址回调机制、策略模式、动态选择函数行为
调用方式直接调用:int* arr = func(5); 通过指针调用:int result = funcPtr(3,5);
内存管理需由调用者释放返回的指针不涉及内存分配,仅指向已有函数
​语法优先级* 与返回类型结合(如int*)(*指针名) 表示指针定义

核心区别​:指针函数是函数,函数指针是变量;前者生成数据地址,后者存储代码地址/指向的是可执行代码而非数据。
二、代码示例

#include <stdio.h>
#include <stdlib.h>// 指针函数定义
int* p(int a, int b) {int* sum = (int*)malloc(sizeof(int));   //局部变量,函数结束后释放if (sum == NULL) {printf("内存分配失败");exit(1);}else {printf("内存分配成功");*sum = a + b;printf("sum = %d\n", *sum);}printf("指针sum的值:%p\n", sum);return sum;
}// 定义函数指针作为sort函数的参数:指向函数的入口地址,类型是intvoid sort(int arr[], int size, int (*compare)(int, int)) {for (int i = 0; i < size - 1; i++) {for (int j = 0; j < size - i - 1; j++) {if (compare(arr[j], arr[j + 1]) > 0) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}// 函数指针调用:函数指针必须与目标函数原型(参数类型、返回类型)完全一致,否则行为未定义
int (*func)(int a, int b);   // func是函数指针变量int main()
{// 调用指针函数,返回指针sump(1, 2);int num[5] = { 5, 4, 3, 2, 1 };// 调用sort函数,传入函数指针作为参数printf("func的地址:%p\n", &func);return 0;
}

http://www.xdnf.cn/news/10073.html

相关文章:

  • iOS 获取Wifi信息
  • 重温经典算法——冒泡排序
  • 国产分子动力学引擎——GPUMD本地部署教程:专为 NVIDIA GPU 加速设计
  • leetcode:372. 超级次方(python3解法,数学相关算法题)
  • litctf2025复现
  • [mcu]系统频率
  • 【GESP真题解析】第 16 集 GESP 二级 2024 年 9 月编程题 1:数位之和
  • LangChain 和 LangChain-ChatChat 的区别
  • 【题解-洛谷】B4295 [蓝桥杯青少年组国赛 2022] 报数游戏
  • Java 中的接口(Interface)与抽象类(Abstract Class)详
  • MCP(模型上下文协议)深度解析:一篇文章彻底理解
  • magic-api配置Git插件教程
  • 重工业专属:Profibus转Profinet网关在矿石粉料输送线中的定制化方案
  • 国产 BIM 软件万翼斗拱的技术突破与现实差距 —— 在创新与迭代中寻找破局之路
  • fiddler怎么抓苹果手机的包
  • 微小店推客系统开发:技术赋能流量裂变,SEO驱动精准获客
  • 14.Java反射机制:解锁动态编程的魔法之门
  • cadence PCB 精度设置成小数点4位方法
  • 如何给老旧 iOS App 添加安全保护?用 Ipa Guard 对 IPA 文件混淆加固实录
  • 计算机毕业设计酒店后台管理系统(vue+springboot+mysql+开题+论文)
  • 【按升序输出三个数】2022-2-2
  • Linux的SHELL脚本中的常用命令
  • JMeter 是什么
  • LoadRunner 是什么
  • 捌拾陆- 海森堡不确定性原理
  • lwip_setsockopt设置地址复用出错(lwip默认不打开,lwip_bindu也会提示端口被占用)
  • 怎么选择合适的高防IP
  • DeepSeek R1-0528 新开源推理模型(免费且快速)
  • git 本地合并怎么撤回
  • 2025.5.26【ZR NOI模拟赛 T2】草莓函数 题解(性质,二分图最大权匹配)