嵌套调用和链式访问

嵌套调用

        嵌套调用就是函数之间的互相调用,每个函数就是⼀个乐高零件,正是因为多个乐高的零件互相无缝的配合才能搭建出精美的乐高玩具,也正是因为函数之间有效的互相调用,最后写出来了相对大型的程序。
        假设我们计算某年某月有多少天?如果要函数实现,可以设计2个函数:

  • is_leap_year():根据年份确定是否是闰年?
  • get_days_of_month():调⽤is_leap_year确定是否是闰年后,再根据月计算这个月的天数
int is_leap_year(int y)
{if(((y%4==0)&&(y%100!=0))||(y%400==0))return 1;elsereturn 0;
}
int get_days_of_month(int y, int m)
{int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int day = days[m];if (is_leap_year(y) && m == 2)day += 1;return day;
}
int main()
{int y = 0;int m = 0;scanf("%d %d", &y, &m);int d = get_days_of_month(y, m);printf("%d\n", d);return 0;
}

        这⼀段代码,完成了⼀个独立的功能。代码中存在了不少的函数调用:
• main 函数调用 scanf 、 printf 、 get_days_of_month
• get_days_of_month 函数调用 is_leap_year
        稍微大一些代码都是函数之间的嵌套调用,但是函数是不能嵌套定义的。

 链式访问

        所谓链式访问就是将一个函数的返回值作为另外一个函数的参数,像链条⼀样将函数串起来就是函数的链式访问。
比如:

#include <stdio.h>
int main()
{int len = strlen("abcdef"); //1.strlen求⼀个字符串的⻓度printf("%d\n", len); //2.打印⻓度return 0;
}

        前面的代码写了2条语句,如果把strlen的返回值直接作为printf函数的参数呢?这样就是⼀个链式访问的例子了。

#include <stdio.h>
int main()
{printf("%d\n", strlen("abcdef")); //链式访问return 0;
}

        再看一个有趣的代码,下面代码执行的结果是什么呢?

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

        这个代码的关键是明白printf函数的返回是啥。

int printf ( const char * format, ... ); 

printf函数返回的是打印在屏幕上的字符的个数。 scanf() 的返回值是⼀个整数,表示成功读取的变量个数https://blog.csdn.net/wait___wait/article/details/135296924
        上面的例子中,我们就第一个printf打印的是第⼆个printf的返回值,第⼆个printf打印的是第三个printf的返回值。
第三个printf打印43,在屏幕上打印2个字符,再返回2
第⼆个printf打印2,在屏幕上打印1个字符,再放回1
第⼀个printf打印1
所以屏幕上最终打印:4321


期待

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

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

相关文章

奇数码问题

title: 奇数码问题 date: 2024-01-05 11:52:04 tags: 逆序对 cstefories: 算法进阶指南 题目大意 解题思路 将二维转化为一维&#xff0c;求他的逆序对&#xff0c;如果逆序对的奇偶性相同&#xff0c;则能够实现。 代码实现 #include<iostream> #include<string.h&…

深度学习框架TensorFlow2快速入门教程

01 深度学习框架TensorFlow2快速入门教程 目录结构 01 概述 02 准备OVF虚拟机镜像 03 导入Ubuntu22的初始化环境 04 使用VMWare拍摄快照进行备份 05 Docker环境的测试和使用 06 安装Nvidia容器工具包 07 GPU支持的TensorFlow的环境搭建和踩坑 08 拉取非GPU支持的TensorFlow镜…

vite 如何设置 pwa,让网页类似 app 那样运行,使用插件 vite-plugin-pwa

vite 如何设置 pwa&#xff0c;让网页类似 app 那样运行&#xff0c;使用插件 vite-plugin-pwa 一、概述 情况还是那么个情况&#xff0c;还是原来的项目 vue2 改为 vitetsvue3 遇到的问题&#xff0c;今天这个问题是如何 在 Vite 环境下设置 PWA。 PWA 就是网页应用可以像 a…

外贸SOHO建站产品图来源?海洋建站教程?

外贸SOHO建站如何处理产品图片&#xff1f;外贸网站设计怎么做&#xff1f; 在当今的互联网时代&#xff0c;外贸SOHO建站已成为越来越多人的选择。然而&#xff0c;对于许多新手SOHO来说&#xff0c;如何获取高质量的产品图却是一个不小的难题。海洋建站将为大家详细解析外贸…

Python元组与字典的基础介绍

元组(tuple) 在Python中,元组是不可变的有序元素的序列 即创建后不可以被修改 创建方式val_name ([val],[val].....) #----------声明------------ tuple_1 (1,2,3) print(tuple_1)元组的运算 虽然说元组的额元素是不可以更改的,但元组之间可以使用,,*号进行运算,运算后会…

正则表达式的语法

如果要想灵活的运用正则表达式&#xff0c;必须了解其中各种元素字符的功能&#xff0c;元字符从功能上大致分为&#xff1a; 限定符 选择匹配符 分组组合和反向引用符 特殊字符 字符匹配符 定位符 我们先说一下元字符的转义号 元字符(Metacharacter)-转义号 \\ \\ 符号…

promethues grafana 安装和使用

文章目录 1、promethues安装2、node-exporter安装3、grafana安装4、配置promethues监控node节点5、grafana操作外传 Docker 镜像下载地址&#xff1a; https://hub.docker.com 比较好的hub.docker.com///-- https://hub.docker.com/u/bitnami grafana监控面板&#xff1a;https…

新手教师的三个阶段

当你踏入教育行业&#xff0c;成为一名新手教师时&#xff0c;可能会感到迷茫和不知所措。但是&#xff0c;请相信&#xff0c;每一位优秀教师都曾经是新手&#xff0c;他们也有过类似的感受。本文将为你揭示新手教师的三个成长阶段&#xff0c;帮助你更快地适应教育工作&#…

第五周:深度学习知识点回顾

前言&#xff1a; 讲真&#xff0c;复习这块我是比较头大的&#xff0c;之前的线代、高数、概率论、西瓜书、樱花书、NG的系列课程、李宏毅李沐等等等等…那可是花了三年学习佳实践下来的&#xff0c;现在一想脑子里就剩下几个名词就觉得废柴一个了&#xff0c;朋友们有没有同感…

SSM电影售票管理系统----计算机毕业设计

项目介绍 管理员角色包含以下功能&#xff1a; 管理员登陆,管理员用户管理,新闻公告增删改查,电影类型增删改查,影院信息增删改查,电影信息增删改查,订单查询,电影评价管理等功能。 用户角色包含以下功能&#xff1a; 用户首页,用户登录,查看电影详情,加入购物车,下单电影票,…

《软件项目接口安全设计规范》

1.token授权机制 2.https传输加密 3.接口调用防滥用 4.日志审计里监控 5.开发测试环境隔离&#xff0c;脱敏处理 6.数据库运维监控审计 软件全套文档&#xff1a;软件开发全套资料-CSDN博客

Oracle笔记-查看表已使用空间最大空间

目前以Oracle18c为例&#xff0c;主要是查这个表USER_SEGMENTS。 在 Oracle 18c 数据库中&#xff0c;USER_SEGMENTS 是一个系统表&#xff0c;用于存储当前用户&#xff08;当前会话&#xff09;拥有的所有段的信息。段是 Oracle 中分配存储空间的逻辑单位&#xff0c;用于存…