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

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

一、区别

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

类型* 函数名(参数列表){//函数体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;
}

相关文章:

  • 会用和用好AI的区别
  • UFSH2024 程序化生成 笔记
  • Java实现命令行图书管理系统(附完整源码)
  • Dif-Fusion:第一个基于扩散模型实现的红外光与可见光图像融合的论文
  • WordPress搜索引擎优化的最佳重定向插件:进阶指南
  • 学习路之PHP--easyswoole简易增删改查入门
  • 隆道公司助力成都打造数字化转型“西部标杆”
  • 高效工具-tldr
  • Rider崩溃问题终极解决指南
  • sensevoice sherpa-onnx部署
  • 基于esp32,控制IO1高低电平 和读取IO0按键的c程序
  • 环境温度通过H2A.Zub和H3K27me3动态调控拟南芥细胞命运决定
  • 【redis实战篇】第六天
  • [学习]C++ 模板探讨(代码示例)
  • 《胜算》
  • 什么是物化视图(Materialized View)?
  • leetcode 3373. 连接两棵树后最大目标节点数目 II 困难
  • ArcPy错误处理与调试技巧
  • 【笔记】suna部署之获取 Firecrawl API key
  • JAVA与C语言之间的差异(二)
  • 网站建设 微信公众号/永久免费国外域名注册
  • 信阳网站开发公司/网球新闻最新消息
  • 网站开发和app开发/天琥设计培训学校官网
  • 17做网店网站/最新的疫情数据
  • 长春网站建设企业/网络推广有哪些渠道
  • 石家庄专业网站制/免费涨热度软件