30.【C语言】函数系列下

news2024/12/26 13:52:00

1.嵌套调用

*定义:函数之间的互相调用

*例:

int function1(int a, int b)
{
	function2(b);//嵌套函数的调用
	return a;
}
//注意:不能将function2定义在function1的里面,这不叫嵌套函数的调用
void function2(int c)
{

}
#include <stdio.h>
int main()
{
	int c = 0;
	int d = 0;
	int e = 0;
	function1(c,d);
	function2(e);
	return 0;
}

2.链式访问

*定义:将一个函数的返回值作为另外一个函数的参数,像链条一样将函数串起来就是函数
的链式访问

#include <stdio.h>
#include <string.h>
int main()
{
	printf("%zd", strlen("abc"));
	return 0;
}

strlen函数的返回值作为printf的参数

练习:求打印结果

#include <stdio.h>
int main()
{
	printf("%d", printf("%d",printf("%d",123)));
	return 0;
}

3个printf,由里向外执行

查阅printf的返回值:字符的个数

printf - C++ Reference

打印123,返回3作为参数给printf,打印3返回1作为参数给printf,打印1

结果:12331

3.函数的声明和定义

*单个文件的声明

如果将上述代码上下颠倒

#include <stdio.h>
int main()
{
	int c = 0;
	int d = 0;
	int e = 0;
	function1(c,d);
	function2(e);
	return 0;
}
int function1(int a, int b)
{
	function2(b);//嵌套函数的调用
	return a;
}
//注意:不能将function2定义在function1的里面,这不叫嵌套函数的调用
void function2(int c)
{

}

编译器报错:

原因:C语言编译器对源代码进行编译的时候,是从第一行往下扫描的,所以函数的调用一定要满足,先声明,后使用(注意区分函数的定义,声明,调用)(函数定义也是特殊的声明)

修改后:

#include <stdio.h>
int function1(int a, int b);//函数的声明,注意加;
void function2(int c);//函数的声明,注意加;
int main()
{
	int c = 0;
	int d = 0;
	int e = 0;
	function1(c,d);//函数的调用
	function2(e);//函数的调用
	return 0;
}
int function1(int a, int b)//函数的定义
{
	function2(b);//嵌套函数的调用
	return a;
}
//注意:不能将function2定义在function1的里面,这不叫嵌套函数的调用
void function2(int c)
{

}

*多个文件的声明

一般地,函数的声明、类型的声明放在头文件(.h)中,函数的实现是放在源文件(.c)文件中

优点:方便写作;代码隐藏;模块化,代码可复用

test.h

int function1(int a, int b);//函数的声明,注意加;
void function2(int c);//函数的声明,注意加;

function1.c

int function1(int a, int b)//函数的定义
{
	function2(b);//嵌套函数的调用
	return a;
}

function2.c

void function2(int c);//函数的声明,注意加;
{
	int c = 0;
	int d = 0;
	int e = 0;
	function1(c,d);//函数的调用
	return 0;
}

main.c

#include "test.h"//注意是双引号!
int main()
{
	int c = 0;
	int d = 0;
	int e = 0;
	function1(c,d);//函数的调用
	function2(e);//函数的调用
	return 0;
}

补:引用头文件用< >还是" "的区别

< > 官方提供的库定义

" " 自定义的或项目特定的头文件

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

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

相关文章

聊一聊 Node.js(Express)的 req.body、req.params 和 req.query 区别和应用场景

在Node.js的Express框架中&#xff0c;处理客户端发送到服务器的数据时&#xff0c;我们主要使用req.body、req.params和req.query三个属性。这些属性虽然都是请求对象(req)的一部分&#xff0c;但它们的数据来源和用途却各不相同。本文将为大家详细解读它们的区别和使用方法。…

AI绘画SD中 ControlNet 组件 IP-Adapter 实现风格迁移,AI绘画垫图神器!

大家好&#xff0c;我是画画的小强 今天给大家介绍一下AI绘画SD中ControlNet 的 IP-Adapter 组件&#xff0c;该组件可以方便快捷的帮我们对图片的风格进行迁移&#xff0c;简而言之就是可以参考你放置的图片风格来生成其他图片。 它的效果和reference only有点类似&#xff…

LabVIEW 实现用户授权与管理多项测试项目

在使用 LabVIEW 开发测试软件时&#xff0c;用户授权和项目管理是一个重要的功能。为了确保系统安全性、灵活性和可扩展性&#xff0c;可以设计一个用户管理系统&#xff0c;允许管理员增加或减少用户的测试项目权限。以下是一个详细的实现方案&#xff0c;包括用户授权管理、项…

vue字段判断是否可以鼠标悬浮或者点击跳转

通过字段判断是否可以鼠标悬浮展示颜色 是否点击 <span :class"[converBond.stkindustry ! null ? hoverSpan:,]"click"converBond.stkindustry ! null ?goToIndustry(converBond.stkindustryname,converBond.stkindustry):false">{{converBon…

【星地多网融合调度平台】——打造全方位、立体化的应急通信网络

在复杂的应急场景下&#xff0c;信息的快速传递与指挥调度显得尤为重要。星地多网融合调度指挥箱&#xff0c;凭借其强大的多网融合能力&#xff0c;确保了指挥中心与前线救援队伍之间的信息流畅&#xff0c;无论是位置追踪、应急通信&#xff0c;还是全方位视频监控&#xff0…

数仓架构解析(第45天)

系列文章目录 经典数仓架构传统离线大数据架构 文章目录 系列文章目录烂橙子-终生成长社群群主&#xff0c;前言1. 经典数仓架构2. 传统离线大数据架构 烂橙子-终生成长社群群主&#xff0c; 采取邀约模式&#xff0c;不支持付费进入。 前言 经典数仓架构 传统离线大数据架…

细说MCU用单路DAC模块设计和输出锯齿波的实现方法

目录 一、STM32G474RE的DAC模块 二、配置 1.配置DAC 2.选择时钟源和Debug 3.配置系统时钟 三、代码修改 1.启动DAC 2.给DAC的数据输出寄存器赋值 3.运行并观察输出 一、STM32G474RE的DAC模块 有些MCU本身就带有数/模转换器(Digital to Analog Converter,DAC)模块&am…

netty入门-3 EventLoop和EventLoopGroup,简单的服务器实现

文章目录 EventLoop和EventLoopGroup服务器与客户端基本使用增加非NIO工人NioEventLoop 处理普通任务与定时任务 结语 EventLoop和EventLoopGroup 二者大概是什么这里不再赘述&#xff0c;前一篇已简述过。 不理解也没关系。 下面会简单使用&#xff0c;看了就能明白是什么 这…

加速决策过程:企业级爬虫平台的实时数据分析

摘要 在当今数据驱动的商业环境中&#xff0c;企业如何才能在海量信息中迅速做出精准决策&#xff1f;本文将探讨企业级爬虫平台如何通过实时数据分析加速决策过程&#xff0c;实现数据到决策的无缝衔接。我们聚焦于技术如何赋能企业&#xff0c;提升数据处理效率&#xff0c;…

深入分析 Android ContentProvider (三)

文章目录 深入分析 Android ContentProvider (三)ContentProvider 的高级使用和性能优化1. 高级使用场景1.1. 数据分页加载示例&#xff1a;分页加载 1.2. 使用 Loader 实现异步加载示例&#xff1a;使用 CursorLoader 加载数据 1.3. ContentProvider 与权限管理示例&#xff1…

On the Dimensionality of Word Embedding论文解读

基本信息 作者Zi Yindoi10.3115/v1/D14-1162发表时间2018期刊NIPS网址https://arxiv.org/abs/1812.04224 研究背景 1. What’s known 既往研究已证实 词嵌入的一元不变性。 多数的词嵌入算法本质上都是矩阵分解。 2. What’s new 创新点 提出了 Pairwise Inner Product&…

Prometheus配置alertmanager告警

1、拉取镜像并运行 1、配置docker镜像源 [rootlocalhost ~]# vim /etc/docker/daemon.json {"registry-mirrors": ["https://dfaad.mirror.aliyuncs.com"] } [rootlocalhost ~]# systemctl daemon-reload [rootlocalhost ~]# systemctl restart docker2、…

单片机主控的基本电路

论文 1.复位电路 2.启动模式设置接口 3.VBAT供电接口 4.MCU 基本电路 5.参考电压选择端口 6.SDRAM电路 7.LCD模块电路 8.USB电路 9.按键电路 10.LED电路 11.SD卡电路 12.电量检测电路 13.蓝牙接口通信电路 14.SPI FLASH 电路

Spark实时(四):Strctured Streaming简单应用

文章目录 Strctured Streaming简单应用 一、Output Modes输出模式 二、Streaming Table API 三、​​​​​​​​​​​​​​Triggers 1、​​​​​​​unspecified&#xff08;默认模式&#xff09; 2、​​​​​​​​​​​​​​Fixed interval micro-batches&am…

总结20个Python接单赚钱的平台,兼职月入6000+_让你早日实现财富自由

今天就给大家盘点几个基本入门接私活的资源&#xff0c;让你轻松学python&#xff0c;实现经济独立。 一、Python兼职种类&#xff1a; 接私活刚学会python那会&#xff0c;就有认识的朋友介绍做一个网站的私活&#xff0c;当时接单赚了4K&#xff0c;后又自己接过开发网站后…

vue3+element-plus 实现动态菜单和动态路由的渲染

在 Vue.js 中&#xff0c;使用 Vue Router 管理路由数据&#xff0c;并将其用于渲染 el-menu&#xff08;Element UI 的菜单组件&#xff09;通常涉及以下几个步骤&#xff1a; 定义路由元数据&#xff1a; 在你的路由配置中&#xff0c;为每个路由项添加 meta 字段&#xff0c…

SQL labs-SQL注入(五,使用sqlmap进行cookie注入)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 引言&#xff1a; Cookie 是一些数据, 存储于你电脑上的文本文件中。当 web 服务器向浏览器发送 web 页面时&#xff0c;在连接关闭后&#xff0c;服务端不会记录用户的信息。Cookie…

新形势下职业教育大数据人才培养策略

一、引言 随着信息技术的飞速发展&#xff0c;大数据已成为驱动经济社会变革的关键力量。在新形势下&#xff0c;职业教育作为技术技能人才培养的重要阵地&#xff0c;面临着如何适应大数据时代要求、提升人才培养质量的紧迫任务。当前&#xff0c;职业教育在大数据人才培养方…

【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !

目录 C语言中指针的大小1. 指针大小的基本概念1.1 32位系统1.2 64位系统 2. 指针大小示例2.1 32位系统输出2.2 64位系统输出 3. 指针大小与数据类型无关示例输出示例 4. 跨平台的指针大小示例输出示例 5. 关键点总结5.1 指针大小与平台关系5.2 跨平台编程注意事项 6. 指针大小示…

PySide(PyQt)的小部件通过伪状态以及自定义特性改变外观

1、通过伪状态来改变外观 伪状态是一种特殊的状态&#xff0c;通常用于描述控件在特定条件下的外观变化。这些状态不是控件的实际属性&#xff0c;而是用于在样式表中应用不同样式的标记。 以QPushButton为例。在 PySide6 中&#xff0c;QPushButton 具有多种伪状态&#xff0c…