指针函数与函数指针的区别

news2024/11/23 21:16:39

1、指针函数

1-1、定义

指针函数,顾名思义,是一个函数,但其返回类型是指针。这意味着当这个函数被调用时,它会返回一个地址值,这个地址值指向某个类型的数据。

1-2、特点

函数性质:首先,它是一个函数,有函数名、参数列表和函数体。

返回类型:函数的返回类型是指针,可以是任何类型的指针,如整型指针、字符型指针等。

返回值接收:在调用指针函数时,需要使用同类型的指针变量来接收其返回值。

1-3、示例

int* func(int a, int b) 
{  
    int* ptr = (int*)malloc(sizeof(int)); // 动态分配内存  
    *ptr = a + b; // 对分配的内存进行赋值  
    return ptr; // 返回指向整数的指针  
}

 1-4、生活举例

假如你是一家餐厅的厨师(函数),你的工作是烹饪(执行函数)。当顾客点了一道菜(调用函数),你完成烹饪后(函数执行完毕),不是直接把菜端到桌上,而是给了服务员一个托盘,托盘上放着做好的菜(返回指针)。这个托盘就是指针,指向了你烹饪好的菜品。服务员(或其他程序部分)通过这个托盘(指针)来找到并上菜(使用返回的数据)。

2、函数指针

2-1、定义

函数指针是一个指针变量,但它不指向普通的变量或数据,而是指向一个函数的首地址。通过函数指针,可以间接地调用函数。

2-2、特点

指针性质:首先,它是一个指针变量,有指针变量的所有特性。

指向函数:这个指针变量指向的是一个函数的首地址,而不是普通的数据或变量。

调用函数:通过函数指针,可以像调用普通函数一样调用它所指向的函数,并传递相应的参数。

2-3、示例

int add(int a, int b) {  
    return a + b;  
}  
  
int main() {  
    int (*funcPtr)(int, int) = add; // 函数指针指向add函数  
    int result = funcPtr(3, 4); // 通过函数指针调用add函数  
    printf("Result: %d\n", result);  
    return 0;  
}

2-4、生活举例

再次回到餐厅的场景。这次,你不是厨师,而是一位餐厅经理。你手上有一本菜单(函数指针),菜单上的每一项都对应着一位厨师(函数)和他们的拿手菜(函数功能)。当顾客点餐时,你不需要亲自去厨房烹饪,而是翻开菜单,找到对应的厨师(通过函数指针找到函数),然后让那位厨师去准备(调用函数)。这里的菜单就相当于函数指针,它存储了厨师(函数)的位置(地址),并允许你通过这个位置来请求服务(调用函数)。

3、对比区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2024】20个高级 Java 面试问题及答案

1:解释Java序列化中transient关键字的意义。 在 Java 中,“ transient ”关键字用于指示变量在对象序列化期间不应被序列化。当变量被标记为“transient”时,意味着该变量应被序列化机制忽略。 这在处理不应持久的敏感或临时数据时特别有用…

基础 - 前端知识体系详解

一、前端三要素 HTML(结构): 超文本标记语言(Hyper Text Markup Language),决定网页的结构和内容。CSS(表现): 层叠样式表(Cascading Style Sheets&#xff0…

基于飞腾平台的Hbase的安装配置

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

人脸操作:从检测到识别的全景指南

人脸操作:从检测到识别的全景指南 在现代计算机视觉技术中,人脸操作是一个非常重要的领域。人脸操作不仅包括检测图像中的人脸,还涉及到人脸识别、表情分析、面部特征提取等任务。这些技术在各种应用中发挥着关键作用,从社交媒体…

Windows Server 2016 Standard 将程序加入开机自启动

分3步 1 打开“启动”文件夹:在Windows的搜索栏中输入“shell:startup”,点击搜索结果中的 “启动” 文件夹即可打开。 2 在启动文件夹中,右键点击空白区域,选择“新建”->“快捷方式”。 3 将 “程序的快捷方式” 添加到启动…

IP转地理位置:3个好用免费开源库代码及数据库对比体验详解

最近在做一个IP定位显示国家省市功能,在全网找了一圈,也每个安装体验过,测试他的数据库精准度。 本人是用PHP的第三方库,整理以下使用过的ip定位转地理位置库。 ip定位转地理位置库 1.itbdw/ip-database: **gihub地…

Qt 系统相关 - 网络与音视频

目录 一、Qt 网络 1. UDP Socket 1.1 核心 API 概览 1.2 回显服务器 1.3 回显客户端 2. TCP Socket 2.1 核心 API 概览 2.2 回显服务器 2.3 回显客户端 3. HTTP Client 3.1 核心 API 3.2 代码示例 二、Qt 音视频 1. Qt 音频 1.1 核心API概览 1.2 示例 2. Qt 视…

Java面试八股之请简述消息队列的发布订阅模式

请简述消息队列的发布订阅模式 发布订阅(Publish-Subscribe,简称 Pub/Sub)模型是一种消息传递模式,它在组件之间提供了高度的解耦和灵活性。这种模式广泛应用于分布式系统、事件驱动架构以及消息队列系统中。下面是发布订阅模型的…

什么是核心交换机?这样回答太到位了

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 你们好,我的网工朋友。 无论是企业内部通信还是对外服务,稳定高效的数据传输都是成功的关键。 在这个背景下&#xff0c…

A-CSPO课程概念澄清和实操:假定(Assumptions)、实验(Experiments)、假设(Hypotheses)

“确保你把这当作一个实验。” “我们的工作假设是客户想要这个。” 这些场景熟悉吗?你的团队(或整个组织)可能会经常混淆假定(Assumptions)、实验(Experiments)和假设(Hypotheses)等术语,这会造成混乱。 让我们澄清一下每一个…

JAVA社会校招人力资源招聘系统小程序源码

解锁职场新篇章,揭秘“社会校招人力资源招聘系统”的奥秘 一、引言:为何社会校招需要数字化升级? 在这个信息爆炸的时代,企业面临着前所未有的招聘挑战:如何从海量简历中精准筛选出合适的人才?如何高效管…

SQLAlchemy 中使用 GroupBy 和 Sum 导致重复计数的问题及解决方法

在 SQLAlchemy 中使用 GroupBy 和 Sum 时,有时会遇到重复计数或意外的查询结果。这通常是因为在聚合查询中没有正确地指定聚合函数或 GroupBy 条件,导致结果集没有按预期方式分组。 1、问题背景 在使用 SQLAlchemy 进行数据查询时,用户在尝试…

入门 - vue整个过程的生命周期详解

生命周期概念 Vue的生命周期就是vue实例从创建到销毁的全过程,也就是new Vue()开始就是vue生命周期的开始。Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom->渲染、更新->渲染、卸载 等⼀系列过程,称…

无人机灯光含义的详解!!!

一、LED指示灯和状态指示灯 LED指示灯:通常位于飞行器的头部机臂上,用于显示无人机的当前状态。 状态指示灯:位于尾部机臂上,提供更多关于无人机状态的信息。 红绿黄灯交替闪烁 表示无人机正在进行系统自检。稍等片刻&#xf…

Mybatis获取主键自增的方法

原本的方法 使用原本的JDBC去获取主键自增的方法如下图所示: 在这段代码中,通过连接对象 conn 的 prepareStatement 方法创建了一个PreparedStatement对象,并将SQL语句和 RETURN_GENERATED_KEYS 常量作为参数传递给该方法。这意味着执行SQL…

使用 Python 创建 Windows 程序列表生成器:从安装程序到配置文件

在当今的数字时代,我们的计算机上安装了数不胜数的程序。但是,您是否曾想过如何快速获取所有已安装程序的列表,并将其转化为可用的配置文件?今天,我们将探讨如何使用 Python 创建一个强大的工具,它不仅可以…

StarRocks Lakehouse 快速入门——Apache Paimon

StarRocks Lakehouse 快速入门指南为您提供了湖仓技术概览,旨在帮助您迅速掌握其核心特性、独特优势和应用场景。本指南将指导您如何高效地利用 StarRocks 构建解决方案。文章末尾,我们集合了来自阿里云、饿了么、喜马拉雅和同程旅行等行业领导者在 Star…

【私有云场景案例分享①】高效的集群管理能力

一、前言 设备的管理对企业至关重要,会影响生产效率、成本控制和竞争力。然而,企业在设备管理上面临设备数量多、设备分布广、维护成本高等挑战。DeviceKeeper设备管理网站作为解决方案,可以通过远程设备监控、远程设备维护和包体共享等功能…

制造业MES系统源码,前端框架:vue.js,后端框架:springboot 功能模块包括:生产计划管理、物料管理、工艺管理、设备管理、

MES系统功能模块解析,MES系统源码 MES系统是一种用于协调和优化制造过程的信息管理系统,可以帮助企业实现生产计划的顺利执行,并提供全面的生产监控和数据分析功能。 MES系统常见的功能模块包括生产计划管理、物料管理、工艺管理、设备管理…

如何把Phalcon 集成到PhpStorm里面

一 背景 按照上一篇文章里面写的Phalcon 创建项目过程中的一些坑, 最终我们在终端可以基于Phalcon命令创建对应的开发项目。但在这个过程中,存在一个问题:那就是写代码的时候,发现Phalcon对应的依赖提示都没有,如下: 从上面这个截图来看,就能发现,Phalcon的啥…