【C】函数指针 int (*addPtr)(int, int);

目录

    • 函数指针
      • 1)定义
      • 2)声明和赋值
      • 3)通过函数指针调用函数
      • 4)用途:函数指针作为函数参数
      • 5)函数名和函数指针
      • 6)复杂一点的例子

函数指针

1)定义

在C语言中,函数指针是指向函数的指针变量。就像普通指针指向变量一样,函数指针指向函数。定义函数指针的一般形式如下:

return_type (*pointer_name)(parameter_types);

这里:

  • return_type 是函数返回类型,
  • pointer_name 是指针变量的名称,
  • parameter_types 是函数参数的类型。

2)声明和赋值

首先,我们需要声明一个函数指针,然后为其赋值。例如,考虑一个简单的函数:

int add(int a, int b) {return a + b;
}

现在,我们可以声明并赋值一个指向这个函数的函数指针:

int (*addPtr)(int, int);  // 声明函数指针
addPtr = add;             // 赋值函数指针

或者,你也可以在声明时直接赋值:

int (*addPtr)(int, int) = add;  // 直接声明并赋值函数指针

3)通过函数指针调用函数

使用函数指针调用函数的语法如下:

int result = addPtr(2, 3);

这将调用 add 函数,并将结果存储在 result 中。这就像直接调用函数一样,但是通过函数指针间接调用。

4)用途:函数指针作为函数参数

函数指针作用:常常用于将函数作为参数传递给其他函数。

这种技术在回调函数和事件处理等情况下很有用。

void processNumbers(int x, int y, int (*operation)(int, int)) {int result = operation(x, y);printf("Result: %d\n", result);
}// 调用
processNumbers(4, 5, addPtr);  // 传递 add 函数的指针作为参数

5)函数名和函数指针

函数名本身就是一个指向函数的指针。

这是因为在C中,函数名可以被隐式转换为指向函数的指针。

当你使用函数名时,它会被编译器解释为该函数的地址,即函数的入口地址。

6)复杂一点的例子

typedef int (*Operation)(int, int); //给函数指针起一个别名,叫 Operationint add(int a, int b) {return a + b;
}int subtract(int a, int b) {return a - b;
}void processNumbers(int x, int y, Operation operation) {   //入口参数是一个函数指针int result = operation(x, y);printf("Result: %d\n", result);
}int main() {Operation addPtr = add;  // 声明并赋值函数指针processNumbers(4, 5, addPtr);  // 通过函数指针调用函数return 0;
}

这个例子包括了函数指针的声明、赋值、传递,以及通过函数指针调用函数等方面。

总体来说,函数指针是一种强大的工具,它在C语言中用于实现许多高级的编程概念,如回调函数和动态函数调用。

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

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

相关文章

智慧校园云桌面解决方案应用场景

​​​​​​教师办公解决方案 教师办公桌面现状 大多数学校一位教师配置一台个人计算机,实际上每位教师平时会使用到的计算机资源不超过15-20%,因此多数时间个人计算机都是处在闲置状态。教师常用的办公用机一般都使用台式机,所有的数据都存放在本地(“信息孤点”),根…

如何购买腾讯云服务器?图文教程超详细

腾讯云服务器购买流程很简单,有两种购买方式,直接在官方活动上购买比较划算,在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵,但是自定义购买云服务器CPU内存带宽配置选择范围广,活动上购买只能选择固定的活动…

​MyBatisPlus的批量插入方法saveBatch时速度缓慢​

一、场景描述 项目组在使用MyBatisPlus的批量插入方法saveBatch时速度缓慢,插入1w条数据,需要近1分钟的时间。 二、解决方案 解决方案很简单,在数据库配置的uri后面加上下面这个属性即可: urlxxxxxxxxxxxxxxxxxxxxxx?rewriteB…

2024年学鸿蒙开发就业前景怎么样?

随着科技的不断进步,鸿蒙系统作为华为自主研发的操作系统,逐渐引起了人们的关注。 2024年,鸿蒙开发就业前景如何? 对于那些对鸿蒙开发感兴趣并希望在这一领域寻找职业发展的人来说,这是一个非常重要的问题。 首先&a…

【cuda】三、矩阵相乘与coalescing writes(合并写操作)

Matrix Multiplication and Optimization 线程块 功能 并行执行:线程块是一组同时执行的线程。它们共同执行分配给它们的任务资源共享:线程块内的线程可以共享数据和同步执行。通过共享内存(Shared Memory)和同步原语&#xff…

[渗透测试学习] Hospital - HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描一下端口 发现8080端口和443端口有http服务 然后发现3389端口是启用了ms-wbt-server服务 在对443端口的扫描没有收获,并且只有邮箱登录界面无法注册 接着看向8080端口,我们随便注册用户登录后发现有文件上传功能 getshell …

Python科学计算进阶:数值积分与微分求解算法应用在Python

在Python中进行科学计算时,数值积分和微分是非常常见的操作。下面我将介绍几种常用的数值积分和微分求解算法,并给出Python代码示例。 一、数值积分 矩形法 矩形法是一种简单的数值积分方法,它使用矩形近似代替被积函数。这种方法虽然简单&a…

利用淘宝/天猫API实现商品数据的实时获取、处理与分析

随着电子商务的飞速发展,对电商平台的数据需求越来越高。对于商家而言,实时获取商品数据是关键。淘宝和天猫作为中国最大的电商平台,提供了丰富的API接口,其中包括按关键字搜索商品API。本文将详细介绍如何使用淘宝/天猫提供的API…

【SpringMVC】—— 如何配置使用SpringMVC(详细步骤)

目录 引言 使用 1、新建模块 2、导入坐标 3、创建SpringMVC控制器类 4、初始化SpringMVC环境 5、初始化Servlet容器,加载SpringMVC环境 6、配置运行 引言 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架,SpringMVC是表现层(web层)的框架,也…

.Net6使用SignalR实现前后端实时通信

代码部分 后端代码 (Asp.net core web api,用的.net6)Program.cs 代码运行逻辑: ​1. 通过 WebApplication.CreateBuilder(args) 创建一个 ASP.NET Core 应用程序建造器。 2. 使用 builder.Services.AddControllers() 添加 MVC 控…

两周掌握Vue3(五):自定义指令、路由、ajax

文章目录 一、自定义指令1.创建和使用自定义指令2.钩子函数3.使用参数 二、路由1.创建一个router实例2.在components目录中创建组件3.将路由实例挂载到应用4.使用路由 三、Ajax 代码仓库:跳转 当前分支:05 一、自定义指令 自定义指令是Vue.js框架提供的…

揭秘返利机器人的工作原理与实现思路

揭秘返利机器人的工作原理与实现思路 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我将为你揭示返利机器人的工作原理与实现思路,让你…

基于Springboot的善筹网(众筹网-有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的善筹网(众筹网-有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring S…

人生当努力

"认定一个目标,便专心致志地向那里走,其余一切都置之度外,这是成功的秘诀,也是免除烦恼的秘诀"—朱光潜 最近有和亲友讨论是否要和别人比,是否要赢的问题.我觉得需要.软弱,实力弱的人才不去比较.如果不和别人比,你如何知自己差在哪儿?连差距都不知,又如何进步.不是…

Vue入门七(Vuex的使用|Vue-router|LocalStorage与SessionStorage和cookie的使用)

文章目录 一、Vuex1)理解vuex2)优点3)何时使用?4)使用步骤① 安装vuex② 注册vuex③ 引用vuex④ 创建仓库Store五个模块介绍 5)基本使用 二、Vue-router三、LocalStorage与SessionStorage、cookie的使用 一…

ChatGPT Plus 经验分享:是否值得花钱升级?

ChatGPT Plus 经验分享:是否值得花钱升级? 五星上将麦克阿瑟曾经说过:“在有钱与没钱面前,我选择了or” ChatGPT 的每月订阅方案- ChatGPT Plus 已经推出一段时间了,目前的费用是$20 USD / 月(约TWD 610 / 月)。 Open…

Spirng MVC见解1

1. SpringMVC概述 1.1 MVC介绍 MVC是一种设计模式,将软件按照模型、视图、控制器来划分: M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为数据承载Bean&#x…

mybatis基本注解、增删改查、结果集映射、一对一、一对多

mybatis注解 基本注解新增删除修改查询 结果映射注解Results结果映射一对一映射一对多映射 基本注解 新增 功能:Insert完成新增操作,类似配置文件的 元素; 说明:新增时所用的参数取值是接口方法的入参,可以是对象&a…

Linux入门级常用命令学习笔记

以下命令是我跟着编程界的大佬鱼皮学习Linux时用的命令,我把它都记下来,权当作笔记,可供自己后期反复练习使用,让我们学习一下最基本的Linux命令吧。 一、Linux实战命令 在dos下 【ssh 服务器ip】可以连接服务器,输入…

运筹说 第80期 | 最小费用最大流问题

前面我们学习了图与网络分析的基础知识及经典问题,大家是否已经学会了呢?接下来小编和大家学习最后一个经典问题——最小费用最大流问题。 最小费用最大流问题是经济学和管理学中的一类典型问题。在一个网络中每段路径都有“容量”和“费用”两个限制的…