C语言 ——— 函数指针的定义 函数指针的使用

目录

何为函数指针

打印 函数名的地址 及 &函数名的地址

函数指针的代码(如何正确存储函数地址)

函数指针的使用


何为函数指针

类比:

整型指针 - 指向整型数据的指针,整型指针存放的是整型数据的地址

字符指针 - 指向字符数据的指针,字符指针存放的是字符数据的地址

由此可得:
函数指针 - 指向函数的指针,函数指针存放的是函数的地址


打印 函数名的地址 及 &函数名的地址

回顾上次:C语言 ——— 数组指针的定义 & 数组指针的使用-CSDN博客

数组名的地址&数组名地址是相同的,那么 函数的地址&函数的地址 是否相同?


创建一个整型变量相加的Add函数:

int Add(int x, int y)
{return x + y;
}

打印Add函数的地址 以及 &Add函数的地址:

由此可见,函数名的地址 和 &函数名的地址 是相同的 


那么 函数地址 如何存储在 函数指针 中?

函数指针的代码(如何正确存储函数地址)

int (*pAdd)(int, int) = &Add;

解析代码:

Add函数的返回值和参数:int Add(int x, int y) 

解析:int (*pAdd)(int, int) = &Add;

解析(*pAdd):表明 pAdd是指针,由于 括号优先级高于 *号,所以要将 *pAdd 括起来

去掉(*pAdd),剩下的就是指针的类型

解析int (int, int):Add函数 返回值是int参数是(int, int),表示 (*pAdd) 的类型是函数

小结:

函数指针的创建方式 类似于 数组指针 


函数指针的使用

通过 函数指针 存放 函数的地址后,又如何通过 函数指针来使用函数 

代码演示: 

#include<stdio.h>
int Add(int x, int y)
{return x + y;
}
int main()
{int (*pAdd)(int, int) = &Add;// 通过函数名使用函数int r = Add(3, 5);printf("3 + 5 = %d\n", r);// 通过函数指针使用函数int s = (*pAdd)(5, 10);printf("5 + 10 = %d\n", s);return 0;
}

代码解析: 

解析:int s = (*pAdd)(5, 10);

pAddAdd函数 的地址,通过 *号解引用 找到 Add函数,再(5,10)传参就能完成函数的使用了

代码验证:

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

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

相关文章

SQLynx数据库管理工具

背景&#xff1a;业主对网络安全要求比较高&#xff0c;不提供VPN等远程工具&#xff0c;也不能开放3306端口到互联网。那怎么样运维数据库就是个难题&#xff1f;找到了SQLynx这个可以网页访问的数据库管理工具&#xff0c;给大家分享一下。 1.介绍 SQLynx原名SQL Studio&…

防抖总结——OIS/EIS/HIS/DIS/机械防抖

文章目录 防抖总结OIS工作原理优缺点应用场景 电子防抖工作原理优缺点应用场景 混合防抖工作原理优缺点应用场景 数字防抖工作原理优缺点应用场景 机械防抖工作原理优缺点应用场景实例 防抖总结 防抖技术工作原理优点缺点适用场景光学防抖&#xff08;OIS&#xff09;通过内置…

[论文笔记] pai-megatron-patch Qwen2-72B/7B/1.5B 长文本探路

[论文笔记] Pai-megatron-patch cpu-offload 改到 Qwen2-CSDN博客 Pai-Megatron-Patch (mcore代码) 长文本限制: 开SP之后,72B能开到16K,7B能开到32K。 但是72B开16K,或者7B开32K时,如果训练时训练样本中有长文本的话,则还是会OOM。 code: 相对于原repo加了一些代…

平面五杆机构运动学仿真matlab simulink

1、内容简介 略 89-可以交流、咨询、答疑 2、内容说明 略 ] 以 MATLAB 程序设计语言为平台 , 以平面可调五杆机构为主要研究对象 , 给定机构的尺寸参数 , 列出所 要分析机构的闭环矢量方程 , 使用 MATLAB 软件中 SIMULINK 仿真工具 , 在 SIMULINK 模型窗口下建立数…

麦田物语第十三天

系列文章目录 麦田物语第十三天 文章目录 系列文章目录一、实现根据物品详情显示 ItemTooltip1.ItemTooltips脚本编写二、制作 Player 的动画一、实现根据物品详情显示 ItemTooltip 1.ItemTooltips脚本编写 首先创建Scripts->Inventory->UI->ItemTooltip脚本,然后…

深入浅出WebRTC—LossBasedBweV2

WebRTC 同时使用基于丢包的带宽估计算法和基于延迟的带宽估计算法那&#xff0c;能够实现更加全面和准确的带宽评估和控制。基于丢包的带宽估计算法主要依据网络中的丢包情况来动态调整带宽估计&#xff0c;以适应网络状况的变化。本文主要讲解最新 LossBasedBweV2 的实现。 1…

docker 安装MySQL 8.4.1

拉取MySQL镜像 docker pull mysql:8.4.1 查看本地镜像 docker images 通过镜像生成容器 docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql:8.4.1 查看目录运行中的容器列表 docker ps 进入容器内简单测试 docker exec -it mysql /bin/b…

使用 Swagger 在 Golang 中进行 API 文档生成

Swagger 是一款强大的 API 文档生成工具&#xff0c;可以帮助开发者轻松创建、管理和展示 RESTful API 文档。在本文中&#xff0c;我们将介绍如何在 Golang 项目中使用 Swagger 来生成 API 文档。 官网地址 &#xff1a; gin-swagger 前提条件 Golang 开发环境&#xff08;…

Docker Desktop安装

0 Preface/Foreward 1 安装 1.1 运行docker安装包 安装完Docker Desktop后&#xff0c;运行Docker Desktop&#xff0c;出现WSL 2安装不完整情况&#xff0c;具体情况如下&#xff1a; 解决方法&#xff1a;旧版 WSL 的手动安装步骤 | Microsoft Learn 也可以直接下载新的安…

Java设计模式:从单例到观察者

设计模式是解决特定问题的通用解决方案。在Java编程中&#xff0c;设计模式可以帮助我们编写更灵活、可维护和可扩展的代码。本文将介绍几种常见的Java设计模式&#xff0c;包括单例、工厂、策略、装饰器和观察者模式。 1. 单例模式 单例模式是一种创建型模式&#xff0c;它确…

2023发卡商城源码,最新自助下单彩虹云商城系统免授权无后门源码

# 彩虹自助下单系统 > PHP版本: > 7.0.1 ____ * 去除所有授权验证 * 支持自定义说说接口 * 去除后台广告与更新 * 可自定义易支付接口 ____ >安装教程: > 1、上传源代码到空间或服务器&#xff0c;并确保权限可读写。 > 2、上传完成后&#xff0c;使用浏览器…

gcd之和(一维)

gcd之和 求 ∑ i 1 n gcd ⁡ ( n , i ) \sum_{i1}^{n}\gcd(n,i) ∑i1n​gcd(n,i)。 那么我们这一道题讲得详细一点。因为这一道题目的 n ≤ 1 0 9 n \leq 10^9 n≤109。这也就导致了一些算法是过不了的&#xff0c;那么我们就先从最简单的讲起&#xff1a; 对每一项来一遍 …

VulnHub:cengbox1

靶机下载地址&#xff0c;下载完成后&#xff0c;用VirtualBox打开靶机并修改网络为桥接即可搭建成功。 信息收集 主机发现和端口扫描 扫描攻击机&#xff08;192.168.31.218&#xff09;同网段存活主机确认目标机ip&#xff0c;并对目标机进行全面扫描。 nmap 192.168.31.…

springboot 项目整合 AI (文心一言)

百度智能云网址&#xff1a;https://cloud.baidu.com/?fromconsole 注册——个人认证——登录成功 第一步&#xff1a;点击千帆大模型平台 ​ 第二步&#xff1a;点击应用接入——创建应用 ​ 第三步&#xff1a;点击接口文档——API列表——可以点击指定模型进行查看调…

H3CNE(路由基础、直连路由与静态路由)

目录 6.1 直连路由 6.2 静态路由理解性实验 6.2.1 配置直连路由 6.2.2 配置静态路由 6.3 路由表的参数与比较 6.3.1 优先级的比较 6.3.2 开销的比较 6.4 路由器中的等价路由、浮动路由、默认路由 6.4.1 等价路由 6.4.2 浮动路由 6.4.3 默认路由(缺省路由) 6.1 直连路…

QT JSON使用实例

下面是一个使用Qt框架的示例代码&#xff0c;展示如何获取仪器的状态&#xff0c;将其打包成JSON格式&#xff0c;保存到当前目录下的JSON文件中&#xff0c;然后通过FTP发送该文件。 1. 准备工作 确保你已经安装了Qt&#xff0c;并创建一个新的Qt Console项目或Qt Widgets项目…

ChatGPT:ChatOpenAI 是什么?

ChatGPT&#xff1a;ChatOpenAI 是什么&#xff1f; ChatOpenAI 是 LangChain 库中的一个类&#xff0c;专门用于与 OpenAI 的 Chat 模型&#xff08;例如 GPT-4&#xff09;进行交互。LangChain 是一个用于构建自然语言处理应用的框架&#xff0c;它提供了与不同语言模型&…

Unity监听某个值是否改变,c#数值监听器

Unity监听某个值是否改变&#xff0c;c#数值监听器 功能监听某个值的变化&#xff0c;当监听到变化之后执行对应的注册事件。 需要创建一个监听器对应&#xff0c;每监听一个值就要创建一个监听器对象&#xff0c;监听器是泛型&#xff0c;需要填写监听的类型。 创建监听器完毕…

Python爬虫:代理ip电商数据实战

引言&#xff1a;数据访问管理引发的烦恼 作为一名Python博主&#xff0c;爬虫技能对于获取和分析数据至关重要&#xff0c;经常爬一下&#xff0c;有益身心健康嘛。爬虫技术对很多人来说&#xff0c;不仅仅是一种工具&#xff0c;更像是一种艺术&#xff0c;帮助我们从互联网…

Pytorch学习笔记——在GPU上进行训练

文章目录 1. 环境准备2. 导入必要库3. 加载数据集4. 定义简单的神经网络模型5. 检查和设置GPU设备6. 定义损失函数和优化器7. 训练模型8. 全部代码展示及运行结果 1. 环境准备 首先&#xff0c;确保PyTorch已经安装&#xff0c;且CUDA&#xff08;NVIDIA的并行计算平台和编程模…