深入学习函数(2)

news2024/11/18 6:44:23

目录

一、函数的嵌套调用和链式访问

                1、嵌套调用

                2、链式访问

二、函数的声明和定义

                1、函数的声明

                2、函数的定义

声明和定义的拓展              

拆成三个文件的好处


一、函数的嵌套调用和链式访问

当代码写的越来越多时,就会发现,其实一个程序都是由函数组成的,你调用我,我调用你,所以函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。

1、嵌套调用

什么是嵌套调用呢?来看看下面的代码:

注意,函数可以嵌套调用,但不能嵌套定义。

那什么是嵌套定义呢?举个例子大家就明白了 

main函数也是函数,main函数只能调用Add函数,而不能定义在函数内部。 

2、链式访问

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

举个例子:

那有的人就问,能不能不返回值len,直接把len替换成strlen("abcdef")呢?其实是可以的,让我们来看看程序运行的结果是否一样 

程序结果还是6,这里就把strlen的返回值做了printf函数的参数,这就是链式访问。

接下来还有一个非常经典的例子:

大家可以先思考这个代码的结果是什么。

接下来我来解释一下为什么是这个答案(答案在解释后)

首先,我们可以在cplusplus这个网站搜索printf来查看它的返回值。

https://legacy.cplusplus.com/reference/cstdio/printf/?kw=printf

接下来我们从外向内分析,printf要打印一个整型,而这个整型是来自printf("%d", printf("%d", 43))的返回值,接下来的printf又要打印printf("%d", 43)的返回值。

所以首先程序会先打印43,打印完43之后就会打印printf("%d", printf("%d", 43))的返回值,而43的字符总数是2,所以会在屏幕中打印2,最后再打印整个printf("%d", printf("%d", printf("%d", 43)))的返回值,也就是1,所以最后会在屏幕上打印4321。

二、函数的声明和定义

1、函数的声明

●告诉编辑器有一个函数叫什么,参数是什么,放回类型是什么,但是具体是不是存在,函数声明决定不了。

函数的声明一般出现在函数的使用之前。要满足先声明后使用。

函数的声明一般要放在头文件中的。

有一部分人可能会把函数定义写在main函数后面,但我们要知道编辑器扫描代码是从上往下扫的,当扫到Add(a, b)发现前面没有见过Add函数,所以就会报错。

第二个警告大家现在可以暂时不理它。

那如何纠正错误呢,只要在main函数前声明就行了。

2、函数的定义

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

●函数的定义也是一种特殊的声明。

像上面刚刚写的代码,可以直接把函数定义放到main函数前,是不是更加简洁。

声明和定义的拓展 

其实我想告诉大家,实际上函数的声明和定义不是这样用的,上面的定义和声明只是语法展示。真正一个工程中,函数的定义和声明又是如何写的呢?我们接着往下看。

比方还是求两个数的和

首先先新建一个头文件(Add.h),然后再定义一个源文件(Add.c),接下来我把函数的定义放到Add.c中,对于函数的声明,我放到Add.h中。如果想使用Add函数,只需在text.c中加上#include "Add.h"即可。(函数的声明一般都放在头文件中,函数的定义(实现)放在源文件中)

 注意#include只包含头文件,库里提供的函数用尖括号,自己写的头文件用双引号。

拆成三个文件的好处(了解)

最后,为什么一个.c文件就可以写完这些代码,而要把它拆成3个文件呢?其实它是有好处的。

①模块化开发(分工)

假设要写一个计算器程序,A程序员写加法,B程序员写减法,C程序员写乘法,D程序员写除法,如果没有多个文件设计,这些程序员都要在text.c中完成,这根本实现不了。有了多文件的设计,能够有效提高效率。

②代码的隐藏

 略

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

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

相关文章

Day802.JVM热点问题 -Java 性能调优实战

JVM部分热点问题 Hi,我是阿昌,今天学习JVM部分热点问题的内容。 1、字符串常量不是在java8中已经被放入到堆中了吗,应该不在方法区中了,咋一些图中还在方法区中? JVM 的内存模型只是一个规范,方法区也是…

Fiddler基础使用

目录预备知识关于web的一些基础知识实验目的实验环境实验步骤一实验步骤二实验步骤三预备知识 关于web的一些基础知识 要分析Fiddler抓取的数据包,我们首先要熟悉HTTP协议。HTTP即超文本传输协议,是一个基于请求/响应模式的、无状态的、应用层的协议&a…

【Python开发】Flask项目的组织架构

Flask项目的组织架构在大型Flask项目中,主要有三种常见的项目组织架构:功能式架构(也就是 Bluelog 程序使用的架构)、分区式架构和混合式架构。我们将以一个示例程序 myapp 作为示例来介绍这三种架构的特点和区别,这个…

教你用HTML+CSS实现百叶窗动画效果

推荐学习专栏: 【JavaWeb】Web前端JavaWeb学习专栏 文章目录前言1、百叶窗效果2、原理讲解3、制作百叶窗4、资源下载5、完整代码总结前言 我们浏览网页的时候总能看见一些炫酷的特效,比如百叶窗效果,本文我们就用HTMLCSS制作一个百叶窗小项…

副业该怎么选择,适合新手的四个副业项目,零基础也可操作的兼职

副业有可能有时挣得并不多,但它是一个改变未来的好机会。假如玩的开了,盈利并不比你工资少。95%的人自主创业也是从第二职业做起,做着干着就全职的了。 四个全员第二职业,新手如何做到单月9000,深入分析看下文&#xf…

license授权服务器

项目介绍 为软件提供授权制的使用方式,license申请端可以为产品生成license授权文件,集成了flowable工作流,经审批后生成license文件。 然后导入到服务端。客户端与服务端netty通信。实时判断license是否合法,从而使软件得到安全…

辣椒辣素修饰卵清蛋白 Capsaicin-ova,苍耳亭偶联鸡卵白蛋白 Xanthatin-ovalbumin

产品名称:辣椒辣素修饰卵清蛋白 英文名称: Capsaicin-ova 用途:科研 状态:固体/粉末/溶液 产品规格:1g/5g/10g 保存:冷藏 储藏条件:-20℃ 储存时间:1年 辣椒碱又称辣椒辣素&#xf…

抓包工具总结对照【fiddler F12 Charles wireshark】

本文主要对比fiddler Charles wireshark,纯手敲制作,动动小手点赞 文章目录抓包fidderF12开发者工具wiresharkCharles下载安装使用web抓包APP 抓包IOSAndroidCharles过滤弱网测试篡改数据修改请求数据重复发送请求Compose编辑接口服务器压力测试本地映射…

前端:Node.js遇到的错误整理

node.js当前错误汇总:错误1npm WARN config global --global, --local are deprecated. Use --locationglobal instead.原因:初步判断是node.js版本问题解决方法:错误2npm WARN logfile could not create logs-dir: Error: EPERM: operation …

MySQL主从复制最全教程(CentOS7 yum)

一、MySQL主从复制介绍 (1)MySQL数据库默认是支持主从复制的,不需要借助于其他的技术,我们只需要在数据库中简单的配置即可。 (2)MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自…

在Docker里安装FastDFS分布式文件系统详细步骤

安装需要的软件包 yum install -y yum-utils 设置yum源 yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo 安装docker yum install -y docker-ce 查看docker版本验证安装是否成功 docker -v 启动docker systemctl start d…

C++ 实用指南

C 发展得非常快!例如,C 标准的页数从 C98/03 的 879 页增加到了 C20 的 1834 页,多了近 1000 页!更重要的是,C 每次修订后,我们都会获得几十个新特性。你需要学习所有这些东西才能写出好代码吗?…

【计算机毕业设计】旅游网站ssm源码

下载链接:https://download.csdn.net/download/licongzhuo/87051535https://download.csdn.net/download/licongzhuo/87051535 一、系统截图(需要演示视频可以私聊) 摘 要 随着人民生活水平的提高,旅游业已经越来越大众化,而旅游业的核心是信息,不论是…

Redis数据结构之——跳表skiplist

写在前面 以下内容是基于Redis 6.2.6 版本整理总结 一、跳表(skiplist) 如何理解跳表?在了解跳表之前,我们先从普通链表开始,一点点揭开跳表的神秘面纱~ 首先,普通单链表来说,即使链表是有序…

第2-3-4章 上传附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

文章目录5.3 接口开发-上传附件5.3.1 接口文档5.3.2 代码实现5.3.3 接口测试5.3 接口开发-上传附件 第2-1-2章 传统方式安装FastDFS-附FastDFS常用命令 第2-1-3章 docker-compose安装FastDFS,实现文件存储服务 第2-1-5章 docker安装MinIO实现文件存储服务-springboot整合minio…

MindMaster思维导图及亿图图示会员 超值获取途径

MindMaster思维导图及亿图图示会员 超值获取途径 会员九折优惠方法分享给大家!如果有需要,可以上~ 以下是食用方法: MindMaster 截图 亿图图示 截图 如果需要MindMaster思维导图或者亿图图示会员,可按照如下操作领取超值折扣优惠…

SaaS系统平台赋能大健康产业互联网变革,助力企业提升市场占有率

当前,数字化浪潮正在重塑大健康产业。随着全国多个重要省市的数字医疗、数字医保等措施正火热展开,我国大健康产业的数字化转型进程正在提速,这也为新一轮的行业洗牌带来新的发展机遇。 大健康产业数字化转型痛点:传统医疗信息化…

消息队列之kafka

1.先部署zookeeper集群 2.了解zookeeper 分布式服务系统框架:存储业务服务节点的元数据及状态信息并 负责通知zookeeper上注册服务节点给客户端 一、Zookeeper 概述 官方下载地址:archive.apache.org/dist/zookee… 1.1 Zookeeper 定义 Zookeeper…

使用KNN进行手写体识别和iris数据集分类

文章目录手写体识别iris数据集分类手写体识别 首先使用load_digits将数据加载,这里的数据集有1797个样本,前1384个训练数据而后面的413个样本作为测试集,每个数据集中的样本是8*8像素的图像和一个[0, 9]整数的标签。紧接着输出64个样本的图像…

【Egg从基础到进阶】二:安装本地Mysql

什么是数据库: 数据库是用于将数据持久化存储的一个容器,并且在这个容器处于云端,而不是像游览器的本地存储一样,数据只是针对你当前所在游览器。游览器的存储是一对一的。而线上数据库的存储是一对多的,或者是多对多的…