刚刚开学了,所以又来更新新的文章了。最近数据结构与算法总算是初步入门了,c++也是学到了类的构造函数和析构函数,但是还是准备把c语言的相关所有内容以文章全部发出来之后,再来发数据结构与算法。这块的内容相关的代码非常多,个人也需要时间去写。数据结构与算法对语言的掌握程度有一定的要求,不过还是希望大家还能坚持从下来。因为这一块大部分老师因为语言的不同,实现的方式不同,就选择用伪代码来实现,我是打算使用c语言进行实现的。废话就聊到这里,现在开始今天的c语言教学。
上次讲了函数传指针 没有看的大家可以康康,今天来聊一聊函数的嵌套调用和链式访问。
大家听到嵌套调用是不是有了这样的想像
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
int text1() {
int text2() {
}
}
int main() {
return 0;
}
但实际上并不是这样,再main函数外,每个函数的地位其实是平等的,真是情况应该是这样
函数可以嵌套调用,而不能嵌套定义
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
int text1() {
}
int text2() {
}
int main() {
return 0;
}
这里就举一个简单的嵌套调用的例子
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
int text1() {
printf("text1调用");
return 0;
}
int text2() {
text1();
return 0;
}
int main() {
texr2();
return 0;
}
这里main函数就是调用了一个text2这样的一个嵌套函数
使用F10进入调试,F11开始逐步调试,可以发现开始这幅图表示开始调用text2这个函数, 继续调试发现
当进在text2中经过text1时开始调用text1函数
最后的结果就是这样 ,在text2中嵌套了一个text1函数。
接下来来讲一下函数的链式访问。标准的将就是将函数的返回值作为函数的一个参数,这里同样举个例子
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
int len =strlen("abc");
printf("%d\n", len);
printf("%d", strlen("abc"));
return 0;
}
大家可以看一下这一段代码,这一段代码是利用了strlebn函数,这里的strlen函数是用于计算字符串长度的,这个函数的返回值为字符串的长度,这里是作为printf的参数。这就是链式访问
介绍到此了,那下面来看一下这段代码
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}
这是一个很明显的链式访问,每一个%d打印的都是后面一个函数的返回值,这里来听我讲解。
printf首先打印43,相信这部分大家都没有什么问题,但是printf("%d,43)的返回值是什么,返回的是打印字符的个数,所以printf("%d,43)的返回值应该是2,所以第二printf所打印的应该是2,他的返回值是1,所以再打印1。这也就是这道题目的答案4321
这一章较为简单,就先讲到这里。
作者又来挖坑了!!!! 下一章将函数递归 做好准备吧