当前位置: 首页 > news >正文

拿捏c语言指针(下)

前言

此篇讲解的主要是函数与指针的那些事~

书接上回  拿捏c语言指针(上)和  拿捏c语言指针(中)

​​​​​​没有看的小伙伴要抓紧喽~

 欢迎关注​​个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



函数指针变量

函数指针变量 用于存放函数的地址

其中,函数名==函数地址,&Add可以换成Add

*pf==&Add ,也就是说Add、*pf、pf三者都可以调用函数

两段有趣的代码

(*(void(*)())0)()

拆分(*( void(*)() 0)() 

void(*)() 函数指针类型,此函数没有参数,返回值是void

void(*)() )0 是将0这个整数值强制类型转换为一个函数的地址。

*( void(*)() 0 是解引用,

(*( void(*)() 0)() 是调用地址为0处的函数

void(* signal ( int,void(*)(int) ) )(int);

拆分void(* signal ( int,void(*)(int) ) )(int);

signal是一个函数,其参数有2个,int类型和函数指针类型void(*)(int) ,该指针指向的函数参数是int,返回值是void。

signal函数的返回类型是void(*  )(int)函数指针 类型,该指针指向的函数参数是int,返回值是void。

typedef类型重命名

  • 可以将复杂的类型名字重命名

如:typedef unsigned int uint;

  • 对于指针类型重命名

如:typedef int* ptr_t;

  • 对于数组指针函数指针类型重命名  与以上有区别,新的名字要放在里面

如:typedef int(*parr_t)[5];   parr_t是数组指针类型新的名字
如:typedef void(*pf)(int);     pf是函数指针类型新的名字

所以我们可以将void(* signal ( int,void(*)(int) ) )(int);

简化为以下两句代码

typedef  void(*ptr_t)(int)  ;  重命名void(*)(int) ptr_t

ptr_t  signal(int,ptr_t);  signal函数的参数类型是int和ptr_t,返回值类型是ptr_t


函数指针数组

函数指针数组本质上是一个数组,里面存放的是函数指针变量 

如下代码中

int(*pfArr[4])(int, int) = { Add,Sub,Mul,Div };//pfArr就是一个函数指针数组,可以存放4个元素         

//加法函数
int Add(int x, int y)
{return x + y;
}
//减法函数
int Sub(int x, int y)
{return x - y;
}
//乘法函数
int Mul(int x, int y)
{return x * y;
}
//除法函数
int Div(int x, int y)
{return x / y;
}
int main()
{int(*pf)(int, int) = &Add;//pf是函数指针int(*pfArr[4])(int, int) = { Add,Sub,Mul,Div };//pfArr是函数指针数组return 0;
}

函数指针数组应用--实现一个简易计算器

实现一个简易计算器,有 加减乘除 功能。

代码实现

利用函数指针数组存放计算函数地址,方便调用。

如下代码中,int(*pfArr[5])(int, int) = { NULL,Add,Sub,Mul,Div };数组下标0处设为NULL,方便其他计算函数对应菜单标号

#include<stdio.h>
//计算器菜单
void menu()
{printf("*****************************\n");printf("***   1.Add   2.Sub       ***\n");printf("***   3.Mul   4.Div       ***\n");printf("***   0.exit              ***\n");printf("*****************************\n");
}
//加法函数
int Add(int x, int y)
{return x + y;
}
//减法函数
int Sub(int x, int y)
{return x - y;
}
//乘法函数
int Mul(int x, int y)
{return x * y;
}
//除法函数
int Div(int x, int y)
{return x / y;
}
int main()
{int input = 0;int x = 0;int y = 0;int(*pfArr[5])(int, int) = { NULL,Add,Sub,Mul,Div };//pfArr是函数指针数组//                            0   1   2    3    4do{menu();printf("请选择:>");scanf("%d", &input);if (input == 0){printf("退出计算器\n");}else if (input >= 1 && input <= 4){printf("请输入两个操作数:>");scanf("%d%d", &x, &y);int ret = pfArr[input](x,y);printf("结果是:%d\n", ret);}else{printf("选择错误,请重新选择\n");}} while (input);return 0;
}

  结果展示                                    

       


回调函数

回调函数就是⼀个通过函数指针调⽤的函数。

把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。

其中qsort函数的运用是 回调函数 典例

可以参考 手撕qsort函数~ ​​​​​​​本篇就不再赘述了                                            

相关文章:

拿捏c语言指针(下)

前言 此篇讲解的主要是函数与指针的那些事~ 书接上回 拿捏c语言指针&#xff08;上&#xff09;和 拿捏c语言指针&#xff08;中&#xff09; ​​​​​​没有看的小伙伴要抓紧喽~ 欢迎关注​​个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#x…...

Spring源码笔记之SpringIOC--(3)什么是BeanFactory?

什么是BeanFactory&#xff1f; BeanFactory是SpringIOC的最顶层接口&#xff0c;涵盖了IOC容器最基本的操作。ListableBeanFactory、ConfigurableBeanFactory提供了IOC容器获取所有Bean、配置Bean的额外能力。所有BeanFactory的实现类持有所有Bean的定义BeanDefinition&#…...

微信小程序之会议OA个人中心后台交互

目录 获取用户昵称头像和昵称 小程序登录 登录-小程序 wx.checkSession wx.login wx.request 后台 准备数据表 反向生成工具生成 准备封装前端传过来的数据 小程序服器配置 导入微信小程序SDK application.yml WxProperties WxConfig WxAuthController 登录-小…...

代码随想录算法训练营第52天(动态规划09 ● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

动态规划part09 198.打家劫舍解题思路 213.打家劫舍II解题思路 337.打家劫舍III解题思路 今天就是打家劫舍的一天&#xff0c;这个系列不算难&#xff0c;大家可以一口气拿下。 198.打家劫舍 题目链接&#xff1a; 198.打家劫舍 视频讲解&#xff1a; 198.打家劫舍 文章讲解&…...

微服务篇之负载均衡

一、Ribbon负载均衡流程 二、Ribbon负载均衡策略 1. RoundRobinRule&#xff1a;简单轮询服务列表来选择服务器。 2. WeightedResponseTimeRule&#xff1a;按照权重来选择服务器&#xff0c;响应时间越长&#xff0c;权重越小。 3. RandomRule&#xff1a;随机选择一个可用的服…...

wayland(xdg_wm_base) + egl + opengles 使用FBO渲染到纹理实例(六)

文章目录 前言一、FBO介绍1. FBO 简介2. FBO的关键组成部分3. FBO的基本工作流程4. FBO 实现渲染到纹理5. FBO 实现离屏渲染二、FBO 实现渲染到纹理的代码实例1. egl_wayland_texture3_2.c2. xdg-shell-client-protocol.h 和 xdg-shell-protocol.c3. 编译4. 运行总结参考资料前…...

基于 RisingWave、Instaclustr 和 Apache Superset 对维基百科实时监控

得益于 RisingWave 和 Kafka 等流处理工具&#xff0c; 数据工程师能实时洞察流数据中的重要信息。这能够助力制定决策&#xff0c;并在多个层面改善用户体验&#xff0c;包括推荐系统、金融、物流、汽车、制造业、 IIOT 设备和零售。 在这篇博客中&#xff0c;我们会把 Risin…...

建站用帝国CMS好还是WordPress好

随着互联网的迅猛发展&#xff0c;内容管理系统(CMS)在网站建设中扮演着越来越重要的角色。在众多CMS中&#xff0c;帝国CMS和WordPress因其强大的功能和广泛的用户基础而备受关注。本文将对这两种CMS进行详细比较&#xff0c;分析它们的优势与不足&#xff0c;以便用户能够根据…...

深度学习基础之《TensorFlow框架(2)—图》

一、什么是图结构 1、图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代表的计算单元之间流动的数据 图结构&#xff1a;数据(Tensor) 操作(Operation) 二、图相关操作 1、默认图 通常TensorFlow会默认帮我们创建一张图 查看默认图的两种方法&#xff1a; &#x…...

Web3区块链游戏:创造虚拟世界的全新体验

随着区块链技术的不断发展&#xff0c;Web3区块链游戏正逐渐崭露头角&#xff0c;为玩家带来了全新的虚拟世界体验。传统游戏中的中心化结构和封闭经济体系已经被打破&#xff0c;取而代之的是去中心化的游戏环境和真实所有权的数字资产。本文将深入探讨Web3区块链游戏的特点、…...

单机启动/开机启动SpringBoot服务的正确方式

此操作只针对于测试环境或单机部署的情况下&#xff0c;使用Jenkins自动化部署或docker部署SpringBoot服务请忽略。 SpringBoot单机启动和集群启动的区别&#xff1a; 部署方式&#xff1a;单机启动可以直接运行jar文件或使用IDE启动应用程序&#xff0c;而双机集群启动需要将…...

[C#]winform基于opencvsharp结合CSRNet算法实现低光图像增强黑暗图片变亮变清晰

【算法介绍】 "Conditional Sequential Modulation for Efficient Global Image Retouching" 是一种图像修饰方法&#xff0c;主要用于对图像进行全局的高效调整。该方法基于深度学习技术&#xff0c;通过引入条件向量来实现对图像特征的调制&#xff0c;以达到改善…...

抓包分析 TCP 协议

TCP 协议是在传输层中&#xff0c;一种面向连接的、可靠的、基于字节流的传输层通信协议。 环境准备 对接口测试工具进行分类&#xff0c;可以如下几类&#xff1a; 网络嗅探工具&#xff1a;tcpdump&#xff0c;wireshark 代理工具&#xff1a;fiddler&#xff0c;charles&…...

代码随想录算法训练营day27 | 93.复原IP地址、78.子集、90.子集II

93.复原IP地址 和C不同&#xff0c;使用列表存储已经分割的数据&#xff0c;而不是直接操作字符串。为了使用这个列表搞了老久&#xff0c;主要问题出在&#xff0c;在判断终止条件的时候&#xff0c;path也需要回溯一下 class Solution:def __init__(self):self.result []s…...

RuntimeError: CUDA out of memory.【多种场景下的解决方案】

RuntimeError: CUDA out of memory.【多种场景下的解决方案】 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;【Matplotlib之旅&#xff1a;零基础精通数据可视化】 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于深度学…...

LeetCode刷题| Leetcode 45. 跳跃游戏,1190. 反转每对括号间的子串,781. 森林中的兔子,739. 每日温度

45. 跳跃游戏 题目链接&#xff1a; 45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;这道题思路不难记&#xff0c;遍历数组每个位置&#xff0c;更新下一次的范围&#xff0c;当当前位置已经在当前范围之外时&#xff0c;步数一定得加一&#xff…...

Redis(03)——发布订阅

基础命令 基于频道 publish channel message&#xff1a;将信号发送到指定的频道pubsub subcommand [argument [argyment]]&#xff1a;查看订阅或发布系统状态subscribe channel [channel]&#xff1a;订阅一个或多个频道的信息unsubscribe [channel [channel]]&#xff1a;退…...

⭐北邮复试刷题LCR 034. 验证外星语词典__哈希思想 (力扣119经典题变种挑战)

LCR 034. 验证外星语词典 某种外星语也使用英文小写字母&#xff0c;但可能顺序 order 不同。字母表的顺序&#xff08;order&#xff09;是一些小写字母的排列。 给定一组用外星语书写的单词 words&#xff0c;以及其字母表的顺序 order&#xff0c;只有当给定的单词在这种外…...

ECMAScript 6+ 新特性 ( 二 )

2.12. class类 ES6 提供了更接近传统语言的写法&#xff0c;引入了 Class&#xff08;类&#xff09;这个概念&#xff0c;作为对象的模板。通过 class 关键字&#xff0c;可以定义类。 ES6 的 class 可以看作只是一个语法糖&#xff0c;它的绝大部分功能ES5 都可以做到&…...

JS游戏项目合集【附源码】

文章目录 一&#xff1a;迷宫小游戏二&#xff1a;俄罗斯方块三&#xff1a;压扁小鸟 一&#xff1a;迷宫小游戏 【迷宫游戏】是一款基于HTML5技术开发的游戏&#xff0c;玩法简单。玩家需要在一个迷宫中找到出口并成功逃脱&#xff0c;本项目还有自动寻路&#xff08;Track&a…...

Label Studio ML Backend架构设计与高可用机器学习服务实现深度解析

Label Studio ML Backend架构设计与高可用机器学习服务实现深度解析 【免费下载链接】label-studio-ml-backend Configs and boilerplates for Label Studios Machine Learning backend 项目地址: https://gitcode.com/gh_mirrors/la/label-studio-ml-backend Label Stu…...

如何通过ReadCat实现纯净小说阅读:开源无广告解决方案

如何通过ReadCat实现纯净小说阅读&#xff1a;开源无广告解决方案 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 在信息过载的数字时代&#xff0c;每打开一个阅读应用都要面对弹窗…...

AI辅助开发:让快马AI帮你构思vc16188视频目标识别代码框架

最近在做一个视频分析的小项目&#xff0c;需要实现目标识别功能。作为一个独立开发者&#xff0c;面对复杂的计算机视觉算法确实有点头疼。好在发现了InsCode(快马)平台的AI辅助开发功能&#xff0c;帮我快速搭建起了vc16188视频目标识别的代码框架。这里分享一下我的实现过程…...

MAF快速入门(21)RC5引入的Script运行能力

大家好&#xff0c;我是Edison。最近我一直在跟着圣杰的《.NETAI智能体开发进阶》课程学习MAF开发多智能体工作流&#xff0c;我强烈推荐你也上车跟我一起出发&#xff01;上一篇&#xff0c;我们了解下.NET 10新推出的File-Based App模式&#xff0c;它和MAF一起可以形成一个强…...

OpenClaw隐私方案:Kimi-VL-A3B-Thinking本地处理医疗影像数据分析

OpenClaw隐私方案&#xff1a;Kimi-VL-A3B-Thinking本地处理医疗影像数据分析 1. 为什么医疗数据必须留在本地&#xff1f; 去年参与一个医学研究项目时&#xff0c;团队需要分析3000多份CT影像。当我们尝试使用某云服务时&#xff0c;合规部门直接叫停——这些包含患者面部特…...

旧设备升级指南:用OpenCore Legacy Patcher让Mac重获新生的5个实用步骤

旧设备升级指南&#xff1a;用OpenCore Legacy Patcher让Mac重获新生的5个实用步骤 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着苹果系统的不断更新&a…...

SEO_深入解读搜索引擎算法与SEO核心原理

SEO:深入解读搜索引擎算法与SEO核心原理 在互联网时代&#xff0c;如何让你的网站在搜索引擎上排名靠前&#xff0c;成为了每一个网站运营者的心头之患。搜索引擎优化&#xff08;SEO&#xff09;作为提升网站可见性的重要手段&#xff0c;背后的核心原理和搜索引擎算法的不断…...

5步搭建你的私人云游戏服务器:Sunshine开源串流方案详解

5步搭建你的私人云游戏服务器&#xff1a;Sunshine开源串流方案详解 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源的游戏串流服务器软件&#xff0c;专为Moon…...

Live Avatar数字人生成避坑指南:硬件要求与常见问题解决

Live Avatar数字人生成避坑指南&#xff1a;硬件要求与常见问题解决 Live Avatar是阿里联合高校开源的一款端到端数字人生成系统&#xff0c;它能把一张人物照片、一段语音和几句文字描述&#xff0c;变成自然流畅的说话视频。听起来很酷&#xff0c;对吧&#xff1f;但现实往…...

3步打造手游键鼠操控系统:QtScrcpy突破触屏局限的高效解决方案

3步打造手游键鼠操控系统&#xff1a;QtScrcpy突破触屏局限的高效解决方案 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 在移动游戏日益复杂的今天&#xff0c;触屏操作的物理限制…...