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

news2024/11/14 8:46:01

目录

何为函数指针

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

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

函数指针的使用


何为函数指针

类比:

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

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

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


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

回顾上次: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.coloradmin.cn/o/1947102.html

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

相关文章

视觉语言动作模型:从网页知识到机器人控制的实战RT-2

作者&#xff1a; Anthony Brohan, Noah Brown, Justice Carbajal, Yevgen Chebotar, Xi Chen, Krzysztof Choromanski, Tianli Ding, Danny Driess, Avinava Dubey, Chelsea Finn, Pete Florence, Chuyuan Fu, Montse Gonzalez Arenas, Keerthana Gopalakrishnan, Kehang Han…

等级保护 总结2

网络安全等级保护解决方案的主打产品&#xff1a; HiSec Insight安全态势感知系统、 FireHunter6000沙箱、 SecoManager安全控制器、 HiSecEngine USG系列防火墙和HiSecEngine AntiDDoS防御系统。 华为HiSec Insight安全态势感知系统是基于商用大数据平台FusionInsight的A…

VMware 17.5.2 下载安装教程

迅雷&#xff1a; 分享文件&#xff1a;VMware17.5.2 链接&#xff1a;https://pan.xunlei.com/s/VO2YWzmIoNXXUziaESHVX2OrA1?pwdhbqh# 百度网盘&#xff1a; 链接: https://pan.baidu.com/s/18iexDwJAec9OkATYnfUlSg?pwd8888 提取码: 8888 1.双击安装包运行 2.若出现以…

《软件导刊》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《软件导刊》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。 问&#xff1a;《软件导刊》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;湖北省科学技术厅 主办单位&#xff1a;湖北…

Redisson分布式锁使用详解

引言 日常开发中&#xff0c;难免遇到一些并发的场景&#xff0c;为了保证接口执行的一致性&#xff0c;通常采用加锁的方式&#xff0c;因为服务是分布式部署模式&#xff0c;本地锁Reentrantlock和Synchnorized这些就先放到一边了&#xff0c;Redis的setnx锁存在无法抱保证原…

VBA技术资料MF178:将某个文件夹中的图片导入Word

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

敏捷开发笔记(第13章节)--COMMAND模式和ACTIVE OBJECT模式

1&#xff1a;PDF上传链接 【免费】敏捷软件开发(原则模式与实践)资源-CSDN文库 没有人天生就具有命令他人的权利。 --Denis Diderot&#xff08;1713一1784&#xff0c;法国哲学家&#xff0c;百料全书编者) 在近几…

20240724----安装git和配置git的环境变量/如何用命令git项目到本地idea

备注参考博客&#xff1a; 1&#xff09;可以参考博客&#xff0c;用git把项目git到本地 2&#xff09;可以参考博客vcs没有git 3)git版本更新&#xff0c;覆盖安装 &#xff08;一&#xff09;安装git &#xff08;1&#xff09;官网下载的链接 https://git-scm.com/downlo…

【轨物方案】新型储能管理系统(EMS)解决方案

储能EMS作为储能系统的大脑&#xff0c;其重要性不言而喻&#xff0c;但是随着储能行业的不断扩大以及对应产品的不断升级&#xff0c;其对应的售后运维变得越来越复杂&#xff0c;储能系统急需配备完善的EMS系统来监控和优化自身的运营状态&#xff0c;同时满足售后运维&#…

LeetCode 热题 HOT 100 (010/100)【宇宙最简单版】

【链表】No. 0206 反转链表 【简单】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xf…

Docker-Compose配置zookeeper+KaFka+CMAK简单集群

1. 本地DNS解析管理 # 编辑hosts文件 sudo nano /etc/hosts # 添加以下三个主机IP 192.168.186.77 zoo1 k1 192.168.186.18 zoo2 k2 192.168.186.216 zoo3 k3注&#xff1a;zoo1是192.168.186.77的别名&#xff0c;zoo2是192.168.186.18的别名&#xff0c;zoo3是192.168.186.1…

JavaScript(14)——DOM

Web API 作用&#xff1a;就是使用JS去操作html和浏览器 分类&#xff1a;DOM&#xff08;文档对象模型&#xff09;、BOM&#xff08;浏览器对象模型&#xff09; DOM DOM是用来呈现以及与任意HTML或XML文档交互的API&#xff0c;简单来说就是操作网页的内容。 DOM树 将H…

Ansible的脚本-----playbook剧本【下】

目录 实战演练六&#xff1a;tags 模块 实战演练七&#xff1a;Templates 模块 实战演练六&#xff1a;tags 模块 可以在一个playbook中为某个或某些任务定义“标签”&#xff0c;在执行此playbook时通过ansible-playbook命令使用--tags选项能实现仅运行指定的tasks。 playboo…

secureCRT同时在所有已打开窗口执行命令、mac-os下使用的SecureCRT版本 以及 SecureCRT一段时间不操作没有响应的问题

一、secureCRT命令行工具一次性同时在所有已打开窗口执行命令 公司的服务器比较多&#xff0c;最近因为opcache&#xff0c;上线发布后&#xff0c;需要重启所有的WEB服务器上的php。目前使用的jenkins发布&#xff0c;不过账号安全问题&#xff0c;给jenkins的账号权限受限不能…

【BUG】已解决:IndexError: positional indexers are out-of-bounds

IndexError: positional indexers are out-of-bounds 目录 IndexError: positional indexers are out-of-bounds 【常见模块错误】 【解决方案】 原因分析 解决方法 示例代码 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博…

golang常用的一些 strings函数

1.判断字符串是否包含另一个字符串 strings.Contains str : "exported_provider_example"prefix : "exported_provider"if strings.Contains(str, prefix) {fmt.Println("字符串包含 exported_provider")} else {fmt.Println("字符串不包含…

学习笔记(数据结构:链表 栈)3

fun为回调函数由主函数决定 栈: 栈是限定仅在表尾进行插入和删除操作的线性表。 先进后出、后进先出 栈顶:允许操作的一端 栈底:不允许操作的一端 入栈&#xff0c;出栈。 顺序栈 链式栈 1.创建 CreateSeqStack 2.销毁 DestroySeqStack 3.判断是否为空栈 IsEm…

机器学习(二十一):错误分析、创造数据和迁移学习

一、错误分析 假设交叉验证集一共有500个数据点&#xff0c;模型拟合结果中&#xff0c;有100个数据点有误。 错误分析就是&#xff0c;手动地分析这100个错误数据&#xff08;或随机选择一些错误数据&#xff09;&#xff0c;根据它们的共同属性、共同特征分类&#xff0c;然…

一文了解论文检索中ESCI与SCI-E的关系

一、SCI与ESCI相关概念 1、SCI SCI全称为Science Citation Index, 简称 SCI 。于1957 年由美国科学信息研究所(Institute for Scientific Information, 简称 ISI)在美国费城创办&#xff0c;是由美国科学信息研究所(ISI)1961年创办出版的引文数据库。SCI收录全世界出版的数、…

深入了解 JMeter 中的响应断言

JMeter 是一个强大的性能测试工具&#xff0c;能够模拟大量用户并发访问网站或应用程序&#xff0c;以便测试其性能和稳定性。在进行性能测试时&#xff0c;我们需要对响应结果进行断言&#xff0c;以确保应用程序或网站的功能和性能符合预期。 JMeter 提供了一套丰富的响应断…