目录
前言:
在上文中小伙伴们结合文末的习题练习,应该对函数的分类、参数以及调用有了一定的掌握。本文我们将进入到嵌套调用、链式访问、声明与定义的学习中。
今天要学习的内容难度相对较低,希望各位小伙伴们能够认真学习,将其牢固掌握。
一、嵌套调用:
在小伙伴们们使用函数时,函数与函数之间可以根据实际需求进行组合,即可以互相调用。
★这里特别要注意:函数可以嵌套调用,但是不能嵌套定义。
我们来简单举个例子:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//自定义函数二:
void new_line()
{
printf("嵌套\n");
}
//自定义函数一:
void three_line(int x)
{
for (x = 0; x < 3; x++)
{
new_line();
//将自定义函数二嵌套进自定义函数一中进行嵌套调用
//函数可以嵌套调用,但不可以嵌套定义
}
}
int main()
{
int a = 0;
three_line(a);
return 0;
}
上述代码中我们可以看到,我们自定义了函数new_line和three_line,在主函数中我们调用了函数three_line,并在函数three_line中嵌套调用了函数new_line。
当主函数运行至three_line(a)时调用了自定义函数three_line,其在获取参数后将参数传递给函数,函数开始执行,循环过程中调用函数new_line,输出目标字符。
我们将其编译运行发现,函数可以进行嵌套调用:
函数的嵌套调用较为灵活,对各位小伙伴们的要求就是能够结合实际情况,灵活的使用嵌套结构来调用函数以提高代码的运行效率。
二、链式访问:
函数的链式访问就是把一个函数的返回值作为另外一个函数的参数。
我们来看这个例子:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}
各位小伙伴们认为这段代码的输出结果是什么呢?
答案是——4321:
到这里肯定就有小伙伴们要问了,这是为什么呢?难道不应该是43吗?在这个地方,有一个知识点需要小伙伴们来了解一下:printf 函数。小伙伴们就要问了,printf 函数有什么可了解的?功能不就是在屏幕上按照我们给定的格式打印内容吗?
这里牵扯到的知识点,就是关于printf 函数的返回值问题。我们在上节课提到的查询工具中对printf 函数进行查询,可以看到如下内容(向下拉并使用自带页面翻译进行翻译后):
我们可以看到,在printf 函数的介绍中,返回值的内容是:成功后,将返回写入的字符总数。
现在回到我们的代码中来看:
printf("%d", printf("%d", printf("%d", 43)));
在这行代码中,最内层的“ printf("%d", 43) ”毫无疑问在屏幕上打印出了“ 43 ”的字样。重点来了:在其完成打印后,返回的是写入的字符总数,即“ 43 ”的字符数,返回值为 2。也就是说此时的代码相当于: