嵌套调用
这里我们运用一个代码来了解嵌套调用
#include <stdio.h>
void new_line()
{
printf("csdn\n");
}
void three_line()
{
int i = 0;
for(i=0; i<3; i++)
{
new_line();
}
}
int main()
{
three_line();
return 0;
}
首先我们在主函数中调用three_line,然后我们来到three_line中,发现定义了一个变量i,然后有一个for循环,i = 0,而循环 < 3,表示循环执行三次,进入循环,发现要调用new_line函数,我们进入new_line函数,打印csdn,因为three_line要执行三次,所以最后结果应该是
csdn
csdn
csdn
这就是函数的嵌套调用
(函数可以嵌套调用但不能嵌套定义)
链式访问
把一个函数的返回值作为另一个函数的参数
这里我们先看一个函数
#include <stdio.h>
#include <string.h>
int main()
{
char arr[20] = "hello";
int ret = strlen(strcat(arr,"bit"));//strlen计算字符串长度
printf("%d\n", ret);
return 0;
}
这里我们要求计算arr的字符串长度,并打印相应的结果
我们发现在这个程序中,我们可以省去定义ret,直接把strlen的结果传给printf得到的结果也是一样的,即:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[20] = "hello";
printf("%d\n",strlen(strcat(arr,"bit")) );
return 0;
}
这就是链式访问,
我们直接把strlen的返回值作为printf的参数打印出来
我们接下来看另一个例子:
#include <stdio.h>
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
//结果是啥?
//注:printf函数的返回值是打印在屏幕上字符的个数
return 0;
}
我们要求第一个printf打印第二个printf的返回值,而第二个printf里要求打印了第三个printf的返回值,而第三个printf要求打印43,那么这是的结果是啥?
这是一个典型的链式访问
要做这一题我们首先要了解printf,即上面的注释:
printf函数的返回值是打印在屏幕上字符的个数
(注:我们这只是简单的了解,具体可以自己私下去MSDN等软件或网站查看)
然后我们来看题目,我们想要打印第一个printf的整形值,首先我们需要知道第二个printf的返回值,而第二个printf的返回值,需要第三个printf的整形值,所以我们首先打印第三个printf的值43,刚刚我们了解到printf返回值是打印屏幕上字符的个数,所以第二个printf应该打印2,这是第一个printf就应该打印1,因为第二个printf的返回值是2,只有一位
所以我们程序的最后结果为:
4321