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

详讲函数.2.

目录

5. 函数的嵌套调用和链式访问

5.1 嵌套调用

5.2 链式访问

小结:

6. 函数的声明和定义

6.1 函数的声明:

6.2 函数的定义:


5. 函数的嵌套调用和链式访问

函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。

5.1 嵌套调用

 代码如下,我们将代码分装在需要使用时调用函数即可。

void A()//函数A
{B();//在定义A函数的时候调用B函数;
}void B()//函数B
{A();//在定义B函数的时候调用A函数;函数可以互相调用
}int main()
{A();B();//需要使用时直接调用函数即可return 0;
}

但值得注意的一点是:函数可嵌套,但是定义不可嵌套!

下面是嵌套定义的错误示范

void A()
{void B()
{}}int main()
{return 0;
}

5.2 链式访问

把一个函数的返回值作为另外一个函数的参数。

为了方便大家理解,我们举个例子,比如说:打印一串字符的长度

int main() 
{int len = strlen("abcdef");printf("%d\n", len);return 0;
}

这里我们是先将字符长度存放在len里面,然后再将len打印出来。

我们其实可以不把返回值存到len中,而是直接打印,代码如下:

int main() 
{printf("%d\n",  strlen("abcdef"));return 0;
}

这就是链式访问,我们将上一条的返回值直接充当下一条的参数。

下面我们看一个例子:

int main()
{printf("%d", printf("%d", printf("%d", 43)));return 0;
}

在这道题中我们在打印了43后还要继续打印,但是我们应该打印什么呢?

在我们不了解函数的情况下,可以进入www.cplusplus.com学习!

 看不懂没关系,我们可以翻译成中文:

 就如上面所说,我们在打印完43后,下一个printf接收到的返回值是2,因为上一个函数有两个字符。打印完2后,下一个只接收到1个字符所以只打印1.

因此,最后结果是4321。

小结:

把一个函数的返回值作为另一个函数的参数就是链式访问。

  

6. 函数的声明和定义

6.1 函数的声明:

  1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。
  2. 函数的声明一般出现在函数使用之前。要满足先声明后使用。
  3. 函数的声明一般要放在头文件中的。(后面会讲为什么放在头文件中)

6.2 函数的定义:

函数的定义是指函数的具体实现,交代函数功能实现。


函数的声明和定义其实和变量相似,我们先举个变量的例子。

 我们可以看到,在函数里我们定义了a后再使用是没问题的。但是如果不小心放到后面:

 我们可以看到它会报错:未声明的标识符;所以,我们在前面声明一下就能解决这个问题:

 

接下来,我们看看函数的例子:

//函数的声明
int Add(int x, int y);int main()
{int a = 10;int b = 20;int c = Add(a, b);printf("%d\n", c);return 0;
}//函数的定义
int Add(int x, int y)
{return x + y;
}

值得注意的是,我们一般在写代码的时候不会这样写,这里这样写是为了讲解函数的声明和定义,一般来说我们直接按顺序先写定义,后面要用到的时候就不用声明了。

“函数的声明一般要放在头文件中,函数的定义放在.c文件里面。”

当我们在编写项目时,往往一个程序需要很多程序员一起编写,比如说这个项目需要50个程序员,如果我们把所有的代码都放在同一个test.c文件中,那么50个程序员怎么写呢?轮流写吗?那肯定不行,所以就创建其他的头文件分模块去写。比如说我们要写一个计算器如下图:

 这样让每个人的代码分模块写,最后再让一个人整合其他人的模块,再包含其他人写的代码就可以实现。举个简单的例子:(我这里是用是.cpp文件,当然最好还是用.c文件)

 这样写有一定的好处,一是便于多人协作;二是可读性强;三就是如果我写的代码很重要,不想让别人看到,就可以这样。

相关文章:

详讲函数.2.

目录 5. 函数的嵌套调用和链式访问 5.1 嵌套调用 5.2 链式访问 小结: 6. 函数的声明和定义 6.1 函数的声明: 6.2 函数的定义: 5. 函数的嵌套调用和链式访问 函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的…...

行测-判断推理-图形推理-位置规律-旋转、翻转

短指针每次逆时针旋转60(排除法选C走人)长指针每次顺时针旋转120选C左上菱形每次顺时针旋转90(排除C D)右上每次旋转180(选B走人)左下每次保持不变右下每次逆时针旋转90选B左上和右上为左右翻转&#xff0c…...

linux shell 入门学习笔记15 shell 条件测试

概念 shell的条件测试目的是得出真和假。 shell 提供的条件测试语法 test 命令 [] 中括号命令 语法*: test条件测试 test命令用来评估一个表达式,他的结果是真,还是假,如果条件为真,那么命令执行状态结果就为0&…...

Apollo(阿波罗)分布式配置安装详解

Apollo(阿波罗) Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性&#…...

Vue3之组件

何为组件 组件化的概念已经提出了很多年了,但是何为组件呢?组件有啥优势?本文将会做出解答,首先我们需要弄清楚何为组件。在VUE的官网中的解释是: 组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对…...

【网络】套接字 -- UDP

🥁作者: 华丞臧. 📕​​​​专栏:【网络】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文章…...

Lambda原理及应用

Lambda原理及应用 Lambda介绍 Lambda 是 JDK8 以后版本推出的一个新特性,也是一个重要的版本更新,利用 Lambda 可以简化内部类,可以更方便的进行集合的运算,让你的代码看起来更加简洁,也能提升代码的运行效率。 Lambda语法 非…...

运动耳机推荐、最值得入手的运动耳机清单共享

现在市面上各式各样的运动蓝牙耳机着实让人挑花了眼,怎样才能从纷繁复杂的市场中挑选出专业性、安全性、舒适性等各个方面都做地可圈可点的运动蓝牙耳机可真不是一件易事啊,甚至连不少老朋友都会踩坑,为了能让大家挑到真正的运动蓝牙耳机,为此…...

c盘爆满--如何清理电脑C盘

问题 c盘饱满很多天了,今天终于忍无可忍,开始展开对c盘的处理 c盘的基本处理有两步, 第一步,电脑系统清理 1,c盘右键属性,有个磁盘清理,好像是系统更新的一些缓存资源,可以直接清理 当然这只…...

Nginx配置web服务器及部署反向代理

Nginx配置web服务器及部署反向代理配置web服务器location语法部署反向代理代理转发配置web服务器 项目部署到linux上的静态文件代理给Nginx处理。当访问服务器IP时,可以自动返回静态文件主页。 主配置文件中server块对应的次配置include /etc/nginx/conf.d/*.conf…...

mvvm和mvc

mvvm是model-view-viewmodel的缩写,前端开发的架构模式 m: model:模型,指的是数据和交互业务逻辑 v: view:视图,用户看到的ui界面 vm: viewmodel:视图模型&#xff0…...

JavaScript while 循环

JavaScript while 循环的目的是为了反复执行语句或代码块。只要指定条件为 true,循环就可以一直执行代码块。while 循环while 循环会在指定条件为真时循环执行代码块。语法while (条件){需要执行的代码 }实例本例中的循环将继续运行,只要变量 i 小于 5&a…...

CMU15-445 Project.0总结

在线测试 本地测试 Project #0 - C Primer 以下是Project #0的网址,2022FALL的Project #0本质上是实现一棵字典树,关于字典树的相关内容可以参考C实现字典树。 在本题中,为了存储对应着字符串的任意类型值,题目设计了一个Tri…...

计算机网络题库---错题本

(一)老生常谈 第一章: 1.什么是计算机网络?其主要功能是什么? 解答: 利用通信设备和线路,将分布在地理位置不同的、功能独立的多个计算机系统连接起来,以功能完善的网络软件实现网…...

【react】react创建项目与引入AntD组件库:

文章目录一、初始化项目:【1】创建项目【2】暴露项目配置文件【3】安装依赖【4】配置less二、快捷键:【1】rcctab三、安装AntD组件库:【1】安装【2】index.js【3】问题:【4】效果:一、初始化项目: 【1】创…...

hook与mixin

看完vue3就开始看vue3的源码,表示很懵~ 刚把rollup打包搞完,这不响应式就接着来了!,还是写篇直接使用vue3的博客清清脑吧! 什么是hook、mixin? mixin: Vue2中多个组件内存在重复JS业务逻辑,使…...

【C语言】自定义类型

一、什么是自定义类型C语言提供了丰富的内置类型,常见的有int, char, float, double, 以及各种指针。除此之外,我们还能自己创建一些类型,这些类型称为自定义类型,如数组,结构体,枚举类型和联合体类型。二、…...

没有上司的舞会(C++,树形DP)

题目描述 某大学有 nnn 个职员,编号为 1…n1\ldots n1…n。 他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。 现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数 ri…...

【java基础】static和final关键字的作用及其用法详解

文章目录static关键字静态字段静态方法静态代码块静态内部类final关键字final字段final方法final类static关键字 这个关键字表示静态的,用于不同地方意思不一样 静态字段 如果我们将其作用到字段上,那么该字段为类所拥有,我们使用new关键字…...

#集成学习#:bagging、boosting、stacking和blending

集成学习是一种机器学习方法,旨在提高单个模型的性能和鲁棒性。它基于这样一个假设:通过结合多个模型的预测结果,可以获得更好的预测性能,因为每个模型都可能从数据中提取不同的信息,因此他们的错误也可能是不同的&…...

GLM-4-9B-Chat-1M惊艳效果:输入50万字小说,精准定位伏笔与人物关系图谱

GLM-4-9B-Chat-1M惊艳效果:输入50万字小说,精准定位伏笔与人物关系图谱 1. 百万长文处理新标杆 想象一下,你手头有一部50万字的网络小说,想要找出所有埋设的伏笔线索,理清复杂的人物关系网。传统方法可能需要花费数天…...

别再只升级OpenSSH了!一次搞懂Linux离线环境下的依赖包管理与编译安装避坑指南

离线环境下的Linux软件编译:从OpenSSH升级到通用依赖管理方法论 当你面对一台无法连接互联网的Linux服务器时,软件升级和安装往往会变成一场噩梦。想象一下:你下载了最新版OpenSSH的源码包,满怀希望地执行./configure,…...

YOLO12在工业质检场景:PCB缺陷识别与小目标检测实战案例

YOLO12在工业质检场景:PCB缺陷识别与小目标检测实战案例 1. 引言:当AI质检员遇上电路板 想象一下,你是一家电子厂的质检主管。每天,成千上万块印刷电路板(PCB)从生产线上下来,每一块都需要经过…...

2023最新版Prometheus+Grafana监控系统搭建指南(含Docker-compose部署)

2023云原生监控实战:基于Docker-compose的PrometheusGrafana全栈部署指南 在云原生技术席卷各行各业的今天,监控系统已成为保障业务稳定性的神经中枢。传统监控方案在面对容器化、微服务架构时往往力不从心,而Prometheus作为CNCF毕业项目&…...

WavePWM库:嵌入式LED正弦调光算法与实现

1. WavePWM库概述:正弦波形LED调光的底层实现原理与工程应用 WavePWM是一个面向嵌入式LED驱动场景的轻量级波形PWM计算库,其核心价值不在于直接控制硬件引脚,而在于 以确定性数学模型生成高保真度的正弦(或类正弦/指数&#xff0…...

等保测评必看!用组策略批量关闭445/139端口(域环境适用版)

企业域环境下批量关闭高危端口的组策略实战指南 在等保测评和日常安全运维中,445、139、135等端口因其历史漏洞和潜在风险,常被列为必须管控的高危端口。对于拥有数百甚至上千台终端的中大型企业来说,逐台手动配置不仅效率低下,更…...

OpenClaw技能扩展指南:为百川2-13B添加公众号发布模块

OpenClaw技能扩展指南:为百川2-13B添加公众号发布模块 1. 为什么需要公众号发布技能 上周我正忙着准备一篇技术分享文章,突然意识到一个痛点:每次写完Markdown文档后,手动复制到公众号编辑器、调整格式、上传封面、设置摘要的过…...

极简安装方案:树莓派部署OpenClaw轻量版对接云端Qwen3-32B

极简安装方案:树莓派部署OpenClaw轻量版对接云端Qwen3-32B 1. 为什么选择树莓派OpenClaw轻量版? 去年夏天,我突发奇想:能不能用树莓派做个24小时在线的AI管家?既能控制智能家居,又能处理简单办公任务。但…...

ollama-QwQ-32B微调实战:定制OpenClaw专属指令集

ollama-QwQ-32B微调实战:定制OpenClaw专属指令集 1. 为什么需要定制OpenClaw指令集 去年冬天,当我第一次用OpenClaw自动整理桌面文件时,发现它总是把"截图"和"截屏"两个文件夹混在一起。这让我意识到:通用大…...

AI 模型量化精度控制与评估方法

AI模型量化精度控制与评估方法 随着人工智能技术的快速发展,AI模型在边缘计算、移动设备等资源受限场景中的应用日益广泛。为了在有限的计算资源下保持模型性能,量化技术成为关键手段。量化过程中精度的损失直接影响模型的可靠性,因此量化精…...