函数名称add 与 add 作为参数传入的区别与探讨

news2024/12/22 12:08:57

在C和C++中,函数名本身就是一个指向该函数代码的指针。因此,当你以函数名作为参数传递给其他函数时,实际上你传递的是该函数的地址。

对于你的代码,add是一个函数,&add是该函数的地址。由于add本身就代表了函数的地址,所以add和&add的值是相同的。

当你将add作为参数传递给func函数时,你实际上是将add函数的地址传递给了func。在func内部,这个参数被用来调用函数。

同样地,当你将&add作为参数传递给func函数时,你实际上是将add函数的地址再次传递给了func。在func内部,这个参数同样被用来调用函数。

因此,无论你使用add还是&add作为参数传递给func函数,结果都是一样的,因为它们都代表了同一个函数的地址。


举个栗子:

#include <stdio.h>  // 引入标准输入输出库。这允许我们使用例如printf这样的函数。  
  
int add(int x, int y) {  // 定义一个名为add的函数,它接收两个整数x和y作为参数,  
    return x + y;  // 并返回它们的和。  
}  
  
typedef int (*InferHook)(int, int); // 定义一个新的类型别名InferHook,它是一个指向函数的指针,该函数接收两个整数参数并返回一个整数。  
  
int func(InferHook p1){ // 定义一个函数func,它接收一个InferHook类型的参数p1,并使用它来调用函数。  
    return p1(3,4); // 调用p1所指向的函数,传入参数3和4,然后返回结果。  
}  
  
int main(){ // 定义主函数,程序从这里开始执行。  
    printf("name------%p\naddress-------%p\n",add,&add); // 使用printf打印出add函数的名称(其本身就是一个地址)和其地址。  
    // "name------%p"是一个格式字符串,表示要打印的是一个内存地址。  
    // "%p"是一个格式指示符,用于打印地址。  
    // "add"是我们要打印的第一个变量,即我们要打印的函数add本身。  
    // "&add"是我们要打印的第二个变量,即add函数的地址。  
  
    printf("name------%d\naddress-------%d\n",func(add),func(&add)); // 使用printf打印出两次调用func的结果,第一次传入add函数,第二次传入add函数的地址。  
    // "name------%d"和"address-------%d"是格式字符串,表示要打印的是整数。  
    // "func(add)"和"func(&add)"是我们要打印的变量,它们分别是传入func的函数指针和函数地址。  
  
    return 0;  // 主函数结束,返回0。  
}

运行结果:

这里实验证明没什么区别,同时不同的编译器,运行结果可能不同?这里不作深入探究;

个人觉得加上&有种画蛇添足的感觉;

水平有限,有问题随时交流!

欢迎一键三连~

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

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

相关文章

YOLOV7 添加 CBAM 注意力机制

用于学习记录 文章目录 前言一、CBAM1.1 models/common.py1.2 models/yolo.py1.3 yolov7/cfg/training/CBAM.yaml2.4 CBAM 训练结果图 前言 一、CBAM CBAM: Convolutional Block Attention Module 1.1 models/common.py class ChannelAttention(nn.Module):def __init__(sel…

vue3升级了些什么

Vue 3 升级了以下几个方面的内容&#xff1a; 响应式系统&#xff1a;Vue 3 使用了 Proxy 对象来替代 Vue 2 中的 Object.defineProperty&#xff0c;这使得响应式系统更加高效和灵活。Vue 3 的响应式系统可以追踪更细粒度的依赖关系&#xff0c;提供了更好的性能和更细致的响应…

深兰科技荣膺“2023人工智能行业领航企业奖”

8月28日&#xff0c;由高科技行业门户OFweek维科网主办&#xff0c;OFweek物联网、OFweek人工智能承办的“维科杯OFweek 2023(第八届)物联网与人工智能行业年度评选(OFweek 8th IoT &#xff06; AI Awards 2023)”在深圳福田会展中心成功举行。 深兰科技凭借在自动驾驶及新能源…

Apollo安装与配置使用

介绍 Apollo&#xff08;阿波罗&#xff09;是一款可靠的分布式配置管理中心&#xff0c;诞生于携程框架研发部&#xff0c;能够集中化管理应用不同环境、不同集群的配置&#xff0c;配置修改后能够实时推送到应用端&#xff0c;并且具备规范的权限、流程治理等特性&#xff0…

外贸新手必看的寄样品攻略!别再盲目踩雷了!

样品&#xff0c;被看做是订单前的一个敲门砖&#xff0c;寄样品这一步如果处理的不好&#xff0c;同样会对最终谈判结果产生较大影响。因此外贸新手在寄样品前&#xff0c;也需要对具体流程和注意事项做一个了解&#xff0c;以避免在这个过程中&#xff0c;造成无法挽回的后果…

西北大学计算机考研844经验分享(初试科目844-笔记课件整理)

西北大学计算机考研844经验分享 个人介绍 ​ 本人是西北大学22级软件工程研究生&#xff0c;考研专业课129分&#xff0c;过去一年里在各大辅导机构任职&#xff0c;辅导考研学生专业课844&#xff0c;辅导总时长达288小时&#xff0c;帮助多名学生专业课高分上岸。 前情回顾…

23款奔驰GLS450豪华型升级原厂电动吸合门,体验绅士的关门状态

电吸门的工作原理是在门框(或门板边缘)上安装一个电磁线圈。当门打开时&#xff0c;电流会流过线圈&#xff0c;形成电磁场。这样&#xff0c;由于磁力的作用&#xff0c;当门靠近门框关闭时&#xff0c;门会自动关闭。 另外&#xff0c;电吸门也有有用的一面。如果下车&#…

【考研数学】概率论与数理统计 —— 第二章 | 一维随机变量及其分布(1,基本概念与随机变量常见类型)

文章目录 引言一、一维随机变量及其分布1.1 随机变量1.2 分布函数 二、随机变量常见类型及分布2.1 离散型随机变量2.2 连续型随机变量及概率密度函数 写在最后 引言 暑假接近尾声了&#xff0c;争取赶一点概率论部分的进度。 一、一维随机变量及其分布 1.1 随机变量 设随机试…

Linux查看目录下文件及其大小

ls -lh在Linux下&#xff0c;"ls -lh"是一个用于显示文件和目录详细信息的命令。它会列出当前目录中的文件和目录&#xff0c;并显示它们的文件大小和权限等详细信息。 其中&#xff0c;参数"-l"是用来显示详细信息的选项&#xff0c;"h"表示以…

gif怎么转换成mp4格式视频

gif怎么转换成mp4格式视频&#xff1f;GIF格式是一种广泛应用的公用图像文件格式标准&#xff0c;具有许多优势。它占用的内存较小&#xff0c;可以实现自动循环播放&#xff0c;并且兼容多个平台。然而&#xff0c;GIF格式也存在一些缺点。例如&#xff0c;它无法处理复杂的图…

恒运资本:三大指数震荡走低,地产股大幅回撤,光刻胶概念逆市上涨

周四&#xff08;8月31日&#xff09;&#xff0c;到上午收盘&#xff0c;A股三大指数震动走低。其间&#xff0c;上证指数跌0.53%&#xff0c;报3120.39点&#xff1b;深证成指和创业板指别离跌0.55%、0.54%&#xff1b;沪深两市算计成交额5290.51亿元&#xff0c;总体来看&am…

如何在小红书进行学习直播

诸神缄默不语-个人CSDN博文目录 因为我是从B站开始的&#xff0c;所以一些直播常识型的东西请见我之前写的如何在B站进行学习直播这一篇。 本篇主要介绍一些小红书之与B站不同之处。 小红书在手机端是可以直接点击“”选择直播的。 文章目录 1. 电脑直播-小红书直播软件2. 电…

【LeetCode算法系列题解】第11~15题

CONTENTS LeetCode 11. 盛最多水的容器&#xff08;中等&#xff09;LeetCode 12. 整数转罗马数字&#xff08;中等&#xff09;LeetCode 13. 罗马数字转整数&#xff08;简单&#xff09;LeetCode 14. 最长公共前缀&#xff08;简单&#xff09;LeetCode 15. 三数之和&#xf…

Unity碰撞检测(3D和2D)

Unity碰撞检测3D和2D 前言准备材料3D2D 代码3D使用OnCollisionEnter()进行碰撞Collider状态代码 使用OnTriggerEnter()进行碰撞Collider状态代码 2D使用OnCollisionEnter2D()进行碰撞Collider2D状态代码 使用OnTriggerEnter2D()进行碰撞Collider2D状态代码 区别3D代码OnCollisi…

Python中*(星号)传可变长的元组

在Python中&#xff0c;*&#xff08;星号&#xff09;可以用来传递变长元组参数&#xff0c;通常在函数定义和函数调用中使用。这是一种用于处理不定数量的参数的方式&#xff0c;使得函数能够接受任意数量的位置参数。 在函数定义中使用 *&#xff1a; 在函数定义时&#xff…

Jupyter lab 配置

切换jupyterlab的默认工作目录 在终端中输入以下命令 PS C:\Users\Administrator> jupyter-lab --generate-config Writing default config to: C:\Users\Administrator\.jupyter\jupyter_lab_config.py它就会生成JupyterLab的配置文件&#xff08;如果之前有这个文件的话…

奥威BI数据可视化工具一出马,财务数据分析不再烧脑

数据可视化工具可以使财务数据分析更加直观和易于理解。这些工具可以将大量的财务数据简化为易于阅读和理解的图表、图形和表格&#xff0c;帮助财务人员更快地分析和发现问题。例如&#xff0c;通过将财务数据转化为柱状图、折线图、饼图等图形&#xff0c;可以更加清晰地展示…

《向量数据库指南》——腾讯云向量数据库(Tencent Cloud VectorDB) SDK 正式开源

腾讯云向量数据库 SDK 宣布正式开源。根据介绍,腾讯云向量数据库(Tencent Cloud VectorDB)的 Python SDK 与 Java SDK 是基于数据库设计模型,遵循 HTTP 协议,将 API 封装成易于使用的 Python 与 Java 函数或类,为开发者提供了更加友好、更加便捷的数据库使用和管理方式。…

刚来的00后进来就有18K,我三年工作经验就是个笑话

00后带来的压力 公司一位工作3年的老油条工资还没有刚来的00后高&#xff0c;她心中不平&#xff0c;对这件事情有不小的怨气&#xff0c;她觉得自己来公司三年了&#xff0c;三年内迟到次数都不超过5次&#xff0c;每天勤勤恳恳&#xff0c;要加班的时候也愿意加班&#xff0…

vue自定义事件 div 拖拽方法缩小

在main.js 引用 // 引入拖动js import dragMove from "./utils/dragMove.js" 创建 drawmove.js export default (app) > {app.directive(dragMove, (el, binding) > {const DragVindow el.querySelector(binding.value.DragVindow)// 按下鼠标处理事件con…