C语言特殊函数

静态函数

背景知识:普通函数都是跨文件可见的,即在文件 a.c 中定义的函数可以在 b.c 中使用。

静态函数:只能在定义的文件内可见的函数,称为静态函数。

语法

staitc void f(void) // 在函数头前面增加关键字 static ,使之成为静态函数
{// 函数体
}

要点:

  • 静态函数主要是为了缩小函数的可见范围,减少与其他文件中重名函数冲突的概率。
  • 静态函数一般被定义在头文件中,然后被各个源文件包含。

递归函数

递归概念:如果一个函数内部,包含了对自身的调用,则该函数称为递归函数。

递归问题:

  • 阶乘。
  • 幂运算。
  • 字符串翻转。

要点:

  • 只有能被表达为递归的问题,才能用递归函数解决。
  • 递归函数必须有一个可直接退出的条件,否则会进入无限递归。
  • 递归函数包含两个过程,一个逐渐递进的过程,和一个逐渐回归的过程。

示例:依次输出 n 个自然数。

思路:先输出前面的 n-1 个自然数,再输出最后一个自然数 n 。而要输出前面的 n-1 个自然数,递归调用自身即可。

// 该函数的功能:依次输出 n 个自然数
void f(int n) 
{if(n < 0)          // 1,当满足此条件时,不再进行递归。return;f(n-1);            // 2,递归调用自己,输出前 n-1 个数printf("%d\n", n); // 3,输出最后一个自然数 n
}

递归调用时,函数的栈内存的变化如下图所示。可见,随着递归函数的层层深入,栈空间逐渐往下增长,如果递归的层次太深,很容易把栈内存耗光。

层层递进时,问题的规模会随之减小,减小到可直接退出的条件时,函数开始层层回归。

递归调用时栈内存的变化 

回调函数(钩子函数)

概念:函数实现方不调用该函数,而由函数接口提供方间接调用的函数,称为回调函数。

示例:系统中的信号处理,是一个典型的利用回调函数的情形。

要点:

  • 示例中函数 sighandler 是回调函数。
  • signal() 将函数回调函数传递给内核,使得内核可以在恰当的时机回调 sighandler。
  • 应用开发者和内核开发者只要约定好回调函数的接口,即可各自开发,进度互不影响。

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

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

相关文章

读取7400MB/s!华为发布eKitStor Xtreme M.2闪存条

今日&#xff0c;华为举行数据存储新春新品发布会&#xff0c;不仅发布全新数据湖解决方案&#xff0c;华为还针对商业市场与分销市场发布了全闪存存储新品。 据介绍&#xff0c;面向游戏加速、影视编辑、户外作业等场景&#xff0c;华为发布eKitStor Xtreme系列高性能M.2闪存条…

Leetcode454四数相加II

参考链接&#xff1a;代码随想录&#xff1a;Leetcode454四数相加II 解法1&#xff1a;听了代码随想录之后自己YY出来的解法&#xff08;200ms&#xff09;&#xff0c;有点慢 class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>&am…

常用的函数式接口(Supplier、Consumer、Predicate、Function)

目录 一.函数式接口作为方法的参数 二.函数式接口作为方法的返回值 三.常用的函数式接口 3.1生产型Supplier接口 3.2消费型Consumer接口 抽象方法&#xff1a;accept 默认方法&#xff1a;andThen 3.3判断型Predicate接口 抽象方法&#xff1a;test 默认方法&#xf…

力扣基础刷题---二分查找

704. 二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 中心思想&#xff1a;找到中间值&#xff0c;跟中间值比…

vue3封装接口(自测可用)

注&#xff1a;别忘记安装axios 在实际的项目实战中如果我们不对接口加以管理&#xff0c;整篇看着就很乱&#xff0c;这个时候我们就要用到接口封装了。 废话不多说直接上代码&#xff01;&#xff01;&#xff01; 首先是request.js import axios from "axios";/…

Windows共享文件夹无法访问,返回错误:有多个连接...多个用户名...

文章目录 问题解决参考 问题 访问共享文件夹时&#xff0c;返回了类似有多个连接…多个用户名…之类的错误&#xff0c;进行了解决。具体是弹出错误窗口&#xff1a; Multiple connections to a server or shared resource by the same user, using more than one user name,…

设计模式--工厂模式

普通创建对象的方式&#xff0c;如&#xff1a; interface ICourse{public void record(); }class JavaCourse implements ICourse{Overridepublic void record() {System.out.println("Java 课程");} } public class Test {public static void main(String[] args)…

2024.2.23

1、消息队列代码 msgsnd.c #include<myhead.h> //定义一个消息类型 struct msgbuf {long mtype; //消息类型char mtext[1024]; //消息正文 };//定义一个宏&#xff0c;表示消息正文大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long)int main(int …

Devc++ Easyx 实现 瓦片地图编辑数据导入游戏

导出的DLC 直接放入 exe 同文件夹下即可自动读取。 // 程序&#xff1a;DLC 自动读取加载框架示例 // 作者&#xff1a;民用级脑的研发记录 // 邮箱&#xff1a;1309602336qq.com // 编译环境&#xff1a;Devc/VC 2010/Visual Studio 2022&#xff0c;EasyX_20220901/Easyx_202…

Docker容器故障排查与解决方案

Docker是一种相对使用较简单的容器&#xff0c;我们可以通过以下几种方式获取信息&#xff1a; 1、通过docker run执行命令&#xff0c;或许返回信息 2、通过docker logs 去获取日志&#xff0c;做有针对性的筛选 3、通过systemctl status docker查看docker服务状态 4、通过…

转载:Linux全自动批量配置SSH免密

转载自 https://www.mr-mao.cn/archives/auto-configure-ssh-nopass-login.html 1、在主机的操作系统上安装expect 2、新建host_ip文件&#xff0c;内容格式如下 host_ip文件格式 172.16.1.100 password 172.16.1.101 password 172.16.1.102 password 172.16.1.103 pass…

[深度学习]图片相似度计算

理论铺垫&#xff1a;VGG16及其在图片对比中的应用 VGG16是一种深度学习模型&#xff0c;它属于卷积神经网络&#xff08;Convolutional Neural Networks, CNNs&#xff09;的一种&#xff0c;由牛津大学的视觉几何组&#xff08;Visual Geometry Group&#xff09;开发。这个…

数据安全治理实践路线(上)

基于以上数据安全治理实践理念&#xff0c;可以按照自顶向下和自底向上相结合的思路推进实践过程。一方面&#xff0c;组织自顶向下,以数据安全战略规划为指导,以规划、建设、运营、优化为主线&#xff0c;围绕构建数据安全治理体系这一核心&#xff0c;从组织架构、制度流程、…

React setState同步还是异步

React18 setState是同步还是异步&#xff1f;_react18 同步-CSDN博客 React18之前或者React18使用了ReactDOM.render&#xff0c;setState在React调度流程中是异步更新&#xff0c;在原生事件和setTimeout中是同步更新。React18使用ReactDOM.createRoot&#xff0c;那么默认都是…

“从根到叶:深入理解排序数据结构“

一.排序的概念及引用 1.1排序的概念 排序是指将一组数据按照一定的规则重新排列的过程。排序的目的是为了使数据具有有序性&#xff0c;便于查找、插入、删除等操作&#xff0c;提高数据的组织和管理效率。 稳定性是指如果序列中存在相等元素&#xff0c;在排序完成后&#…

LINUX中用C获得当前执行应用的全路径

之前有博文&#xff1a; LINUX中用C获得当前执行应用的所在路径_linux c语言 直接使用.\获取的路径是程序所在路径 还是命令执行路径-CSDN博客 这个代码也没问题。现实中有时取的路径并不对。比如说&#xff0c;我是../work/test&#xff0c;这个路径就不对了。简单的说&#…

nginx中的location

在 nginx 中&#xff0c;location 是用来匹配请求 URI 的指令&#xff0c;它告诉 NGINX 如何处理特定的请求。location 指令通常用于配置不同 URI 的访问规则&#xff0c;例如重定向、反向代理、设置缓存等。 以下是 location 指令的一般格式&#xff1a; location [ | ~ | …

网卡本质,网络发展(局域网,广域网概念)

目录 引入 网卡的本质 网络的发展 引入 早期 局域网LAN&#xff08;Local Area Network&#xff09; 广域网WAN&#xff08;Wide Area Network&#xff09; 注意 引入 前面我们已经学习了很多关于linux系统的知识,其中文件系统和线程尤为繁杂 而网络其实也算系统的一部…

Dart:谷歌的现代化编程语言之旅

内容概览 引言&#xff1a;一、Dart语言简介二、Dart的特点三、Dart在Flutter中的应用四、Dart的未来展望五 与JavaScript代码对比结语&#xff1a; 引言&#xff1a; 在Web和移动应用开发领域&#xff0c;JavaScript一直是最流行的编程语言之一。然而&#xff0c;随着技术的不…

2024年开发者的最好选择!!没有之一

中国银河证券1月23日明确指出&#xff1a;鸿蒙应用将在2024年迎来爆发。 2024年Q2推出开发者Beta版&#xff0c;2024年Q4推出商用版。今年年终将有 5000 款应用完成原生鸿蒙开发&#xff0c;未来支持 50 万款应用。覆盖便捷生活、出行文旅、金融便利、社交资讯、生产力工具、影…