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

C语言 函数指针详解

一、函数指针

1.1、概念

函数指针:首先它是一个指针,一个指向函数的指针,在内存空间中存放的是函数的地址

示例:

int Add(int x,int y)
{return x+y;}
int main()
{printf("%p\n",&Add);//打印一下函数Add()的地址printf("%p\n",Add);//数组名等于数组首元素地址,那函数名是等于函数地址吗?return 0;
}

函数名是等于函数地址的!

1.2、函数指针的使用方法

函数指针的定义函数的返回值类型(*指针名)(函数的参数列表类型

int Add(int x, int y)
{return x+y;
}int main()
{int (*pf)(int, int) = &Add;//函数指针定义,返回值类型和参数类型与函数Add()相同
}

1.3、怎么使用函数指针去调用函数呢?

void Add(int x, int y){return x+y;}int main(){int (*pf)(int,int)=&Add;int ret=(*pf)(3,5);
}

解析:
        int ret=(*pf)(3,5),此时就相当于通过函数名调用: int ret=Add(3,5);},我们又知道:函数名是等于&函数名的,所以int (*pf)(int,int)=&Add,可改成:int (*pf)(int,int)=Add;此时Add等价于pf,所以:int ret=(*pf)(3,5);语句可改成:int ret=pf(3,5);等价于int ret=Add(3,5),故我们知道了对于:int ret=(*pf)(3,5);语句来说,*是没有意义的,有一个或多个或者没有都不影响;
 

二、阅读两段有趣的代码

注:来源于《c陷阱和缺陷》;

1.( *(void( *)( ))0 )( )
解析:
这段代码的含义是:

(1)调用0地址处的函数
(2)该函数无参数,返回值是void
(3)拆分:
·     ·●void()() 表示函数指针类型
     ··●( void()() )0 表示对0进行强制类型转换,把0强制类型转换成一个函数的地址;如(int)3.14
··     ●* ( void()() )0 表示对0地址处的函数进行了解引用操作
      ··●( ( void(*)() )0)() 则表示调用0地址处的函数
(4)请看图解:
在这里插入图片描述

 

2.void (* signal(int,void( * )( int ) ) )(int)
解析:

(1)signal和()先结合,说明signal是一个函数名
(2)signal函数第一个参数的类型为int,第二个参数的类型为函数指针,该函数指针指向一个参数为int,返回值为void的函数;
(3)signal 函数的返回类型也是一个函数指针,该函数指针,指向一个参数为int,返回值为void函数
(4)请看图解:
在这里插入图片描述

综上,signal是一个函数声明;
 


 

相关文章:

C语言 函数指针详解

一、函数指针 1.1、概念 函数指针:首先它是一个指针,一个指向函数的指针,在内存空间中存放的是函数的地址; 示例: int Add(int x,int y) {return xy;} int main() {printf("%p\n",&Add);…...

LNMP及论坛搭建

安装 Nginx 服务 systemctl stop firewalld systemctl disable firewalld setenforce 0 1.安装依赖包 #nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。 yum -y install pcre-devel zlib-devel…...

【使用机器学习和深度学习对城市声音进行分类】基于两种技术(ML和DL)对音频数据(城市声音)进行分类(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Godot 4 练习 - 制作粒子

演示项目dodge_the_creeps中,有一个Trail,具体运行效果 想要看看咋实现的,看完也不清晰,感觉是要设置某些关键的属性 ChatGPT说:以下是一些重要的属性: texture:用于渲染粒子的纹理。您可以使用…...

Java基础继承详解

Java基础继承详解 在Java中,继承是面向对象编程中的一个重要概念。通过继承,一个类可以从另一个类继承属性和方法,使代码重用和扩展更加方便。下面是关于Java基础继承的一些详解: 关键字: 使用extends关键字可以在一个…...

如何维护你的电脑:打造IT人的重要武器

文章目录 方向一:介绍我的电脑方向二:介绍我的日常维护措施1. 定期清理和优化2. 保持良好的上网习惯和安全防护3. 合理安排软件和硬件的使用4. 数据备份和系统还原 方向三:推荐的维护技巧1. 数据分区和多系统安装2. 内部清洁和散热优化3. 安全…...

【雕爷学编程】MicroPython动手做(31)——物联网之Easy IoT 3

1、物联网的诞生 美国计算机巨头微软(Microsoft)创办人、世界首富比尔盖茨,在1995年出版的《未来之路》一书中,提及“物物互联”。1998年麻省理工学院提出,当时被称作EPC系统的物联网构想。2005年11月,国际电信联盟发布《ITU互联网…...

Elasticsearch 快照和恢复

文章目录 简介快照存储库说明创建或更新存储库接口说明路径参数查询参数请求正文 使用 fs 方式创建存储库验证储存库获取存储库信息删除存储库清理储存库 快照创建快照路径参数查询参数请求正文示例 获取快照查询参数示例 克隆快照查询参数示例 获取快照状态示例 恢复快照查询参…...

Packet Tracer - 检验 IPv4 和 IPv6 编址

Packet Tracer - 检验 IPv4 和 IPv6 编址 地址分配表 设备 接口 IPv4 地址 子网掩码 默认网关 IPv6 地址/前缀 R1 G0/0 10.10.1.97 255.255.255.224 N/A 2001:DB8:1:1::1/64 N/A S0/0/1 10.10.1.6 255.255.255.252 N/A 2001:DB8:1:2::2/64 N/A 本地链路 F…...

PHP8的表达式-PHP8知识详解

表达式是 PHP 最重要的基石。在 PHP8中,几乎所写的任何东西都是一个表达式。简单但却最精确的定义一个表达式的方式就是"任何有值的东西"。 最基本的表达式形式是常量和变量。当键入"$a 5",即将值"5"分配给变量 $a。&quo…...

亚马逊云科技七项生成式AI新产品生成式AI,为用户解决数据滞后等难题

7月27日,亚马逊云科技在纽约峰会上一连发布了七项生成式AI创新,涵盖了从底层硬件到工具、软件、再到生态的全方位更新,成为它在该领域迄今最全面的一次升级展示,同时也进一步降低了生成式AI的使用门槛。 亚马逊云科技凭借自身端到…...

图片等比例显示全部,兼容不同宽高比例图片

功能描述&#xff1a;预览瀑布流图片 点击预览不同的尺寸图片 <!-- 预览页面 --><div class"sea"><img :src"seaobj.url" alt""></div> .sea {z-index: 100;position: fixed;top: 0;text-align: center;background-colo…...

·[K8S:使用calico网络插件]:解决集群节点NotReady问题

文章目录 一&#xff1a;安装calico&#xff1a;1.1&#xff1a;weget安装Colico网络通信插件&#xff1a;1.2&#xff1a;修改calico.yaml网卡相关配置&#xff1a;1.2.1&#xff1a;查看本机ip 网卡相关信息&#xff1a;1.2.2&#xff1a;修改calico.yaml网卡interface相关信…...

泊松损坏图像的快速尺度间小波去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

服务器端开发-golang dlv 远程调试

1。需要root权限的服务器代码调试 sudo ./appps to get piddlv attach pid --headless --listen:40000 --api-version2 --accept-multiclientattach the golang IDE or other IDE 2。不需要root权限的服务器代码调试&#xff0c;另一种选择 dlv --listen:40000 --headlesstr…...

STM32F103——时钟配置

目录 1、认识时钟树 1.1 什么是时钟树 1.2 时钟系统解析 1.2.1 时钟源 1.2.2 锁相环PLL 1.2.3 系统时钟SYSCLK 1.2.4 时钟信号输出MCO 2、如何修改主频 2.1 STM32F1时钟系统配置 2.2 STM32F1 时钟使能和配置 下列进行举例的开发板是原子哥的战舰开发板STM32F103ZET…...

【Linux】信号捕捉

目录 信号捕捉1.用户态与内核态1.1关于内核空间与内核态&#xff1a;1.2关于用户态与内核态的表征&#xff1a; 2.信号捕捉过程 信号捕捉 1.用户态与内核态 用户态&#xff1a;执行用户代码时&#xff0c;进程的状态 内核态&#xff1a;执行OS代码时&#xff0c;进程的状态 …...

超详情的开源知识库管理系统- mm-wiki的安装和使用

背景&#xff1a;最近公司需要一款可以记录公司内部文档信息&#xff0c;一些只是累计等&#xff0c;通过之前的经验积累&#xff0c;立马想到了 mm-wiki&#xff0c;然后就给公司搭建了一套&#xff0c;分享一下安装和使用说明&#xff1a; 当前市场上众多的优秀的文档系统百…...

安卓:UDP通信

目录 一、介绍 网络通信的三要素&#xff1a; &#xff08;1&#xff09;、IP地址&#xff1a; IPv4: IPv6: IP地址形式&#xff1a; IP常用命令&#xff1a; IP地址操作类: &#xff08;2&#xff09;、端口&#xff1a; &#xff08;3&#xff09;、协议: UDP协…...

clickhouse安装

clickhouse安装 在线安装和离线安装 一、环境准备: 1.检查系统是否支持clickhouse安装 (向量化支持) grep -q sse4_2 /proc/cpuinfo && echo “SSE 4.2 supported” || echo “SSE 4.2 not supported.” 2.下载对应的clickhouse包 复制运行之后,就会将对应的包加入…...

龙虾agent-browser获得chromium包问题

小龙虾非常火爆&#xff0c;在装agent-browser的时候&#xff0c;普通人往往被chromium的安装堵死了。网上的跨域安装方法一大堆&#xff0c;包括用镜像站点&#xff0c;国内所有的镜像站点都不行。但是真正能走通的&#xff0c;我到最后也没有试出来。最后只能自己想出一种手动…...

Hunyuan-MT-7B开源镜像免配置部署:像素语言传送门一键启动教程(含GPU适配)

Hunyuan-MT-7B开源镜像免配置部署&#xff1a;像素语言传送门一键启动教程&#xff08;含GPU适配&#xff09; 1. 项目介绍 像素语言跨维传送门是一款基于Tencent Hunyuan-MT-7B大模型构建的创新翻译工具。它将传统翻译体验重构为16-bit像素冒险风格&#xff0c;让语言转换变…...

Matlab/Simulink仿真BLDC电机:避开转速闭环控制的5个常见坑

BLDC电机转速闭环仿真避坑指南&#xff1a;从参数配置到结果验证的完整解决方案 在电机控制领域&#xff0c;BLDC&#xff08;无刷直流电机&#xff09;因其高效率、长寿命和低维护成本等优势&#xff0c;已成为工业自动化、电动汽车和消费电子等领域的主流选择。Matlab/Simul…...

从安防摄像头到直播:手把手教你用ZLMediaKit搭建GB28181视频监控平台

从安防摄像头到直播&#xff1a;手把手教你用ZLMediaKit搭建GB28181视频监控平台 在智能安防和物联网快速发展的今天&#xff0c;视频监控系统的网络化和智能化已成为行业标配。GB28181作为国内视频监控领域的国家标准协议&#xff0c;实现了不同厂商设备间的互联互通。而ZLMed…...

如何用自然语言开发Godot游戏:3大突破性功能解析

如何用自然语言开发Godot游戏&#xff1a;3大突破性功能解析 【免费下载链接】Godot-MCP An MCP for Godot that lets you create and edit games in the Godot game engine with tools like Claude 项目地址: https://gitcode.com/gh_mirrors/god/Godot-MCP 你是否想过…...

Umi-OCR:重新定义本地化文字识别的工作流范式

Umi-OCR&#xff1a;重新定义本地化文字识别的工作流范式 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置多国语言库。 …...

抖音批量下载终极指南:3分钟掌握高效无水印下载技巧

抖音批量下载终极指南&#xff1a;3分钟掌握高效无水印下载技巧 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

爱毕业aibiye等8款智能应用显著改善了论文撰写体验,编程与学术研究流程更加顺畅

文章总结表格&#xff08;工具排名对比&#xff09; 工具名称 核心优势 aibiye 精准降AIGC率检测&#xff0c;适配知网/维普等平台 aicheck 专注文本AI痕迹识别&#xff0c;优化人类表达风格 askpaper 快速降AI痕迹&#xff0c;保留学术规范 秒篇 高效处理混AIGC内容&…...

Word转HTML图片处理全攻略:Base64 vs 文件存储的实战对比

Word转HTML图片处理全攻略&#xff1a;Base64 vs 文件存储的实战对比 在文档处理领域&#xff0c;Word转HTML的需求日益增长&#xff0c;尤其是需要将文档内容嵌入网页或富文本编辑器时。图片作为文档的重要组成部分&#xff0c;其处理方式直接影响转换效果和系统性能。本文将深…...

为什么92%的FastAPI流式AI项目在高并发下崩溃?深度解析event loop争用、response.body迭代器生命周期与uvicorn worker模型冲突

第一章&#xff1a;FastAPI 2.0流式AI响应的高并发失效现象全景透视当FastAPI 2.0被用于承载大语言模型&#xff08;LLM&#xff09;的SSE&#xff08;Server-Sent Events&#xff09;或分块Transfer-Encoding: chunked流式响应时&#xff0c;大量并发请求下常出现连接提前终止…...