本人0基础开始学编程,我能学会的,你也一定可以,学会多少写多少。
下载安装请从官网入手,社区版本即可,这里主要使用的软件是VS2019,图标如下。
上一篇:从0开始学c语言-14-关于(1)函数定义、函数分类、函数参数、函数调用以及函数练习_阿秋的阿秋不是阿秋的博客-CSDN博客
接续上一篇内容
目录
五、函数的嵌套调用和链式访问
1·函数嵌套调用
函数和函数之间可以根据实际的需求进行互相调用的。
嵌套调用就是在一个函数里调用另外一个函数,函数可以嵌套调用,但是不能嵌套定义。
嵌套定义就是你在定义一个函数的时候,又在定义的这个函数里定义了另外一个函数,这样做是不行的。
#include <stdio.h>
void line() //自定义函数一
{
printf("hehe\n");
}
void three_line() //自定义函数二
{
int i = 0;
for(i=0; i<3; i++)
{
line(); //自定义函数二中调用函数一
}
}
int main()
{
three_line();
return 0; }
上面这段代码就属于函数嵌套调用。
2·链式访问
把一个函数的返回值作为另外一个函数的参数。
例子1
#include <stdio.h>
#include <string.h>
int main()
{
char arr[20] = "hello";
int ret = strlen(strcat(arr,"aqiu"));
printf("%d\n", ret);
return 0;
}
在这里介绍一下代码中的strcat函数,如果不知道怎么自己学习函数的,去看我上一篇文章介绍的学习网址。
我所理解的就是能够把source中的字符串放在destination后,并且字符是连续的。
英文翻译:将源字符串的副本附加到目标字符串。目标中的终止空字符由源的第一个字符,以及一个空字符包含在两个字符串的连接所形成的新字符串的末尾在目的地。目的地和源不应重叠。
看不懂就记住字符是连续的。
回到链式访问的定义:把一个函数的返回值作为另外一个函数的参数。
这个函数的返回值是char类型的destination is returned.
所以我们所计算的字符串长度会是strcat函数的返回字符串,也就是把souce中字符串放到destination中的字符串。
所以结果是9。
例子2
始终记住这句话:把一个函数的返回值作为另外一个函数的参数。
int main()
{
printf("%d", printf("%d", printf("%d", 88)));
//注:printf函数的返回值是打印在屏幕上字符的个数
return 0;
}
为什么结果会是8821呢?
从内向外分析,
第一个printf执行的就是以整型的形式打印88的功能。
第二个和第三个printf打印的是前一个printf函数返回值(也就是打印在屏幕上字符的个数)。
也就是说第一个88打印之后,返回值(也就是这个函数执行后的结果)是2,就打印了2。
第二个2打印后,返回值是1,就打印了1。
六、函数的声明和定义
1·函数声明
-告诉编译器这个函数叫什么,参数是什么,返回类型是什么。但是函数声明决定不了这个函数是不是存在的。(因为存在的函数需要定义)-函数的声明一般出现在函数的使用之前。要满足 先声明后使用 。-函数的声明一般要放在头文件中的
注意函数的声明和变量声明的区别,函数直接写好需要声明的,变量需要则extren开头。
2·函数定义
3·代码演示
第一步,建立好函数对应的头文件和源文件。
第二步,在头文件中进行函数声明。
第三步,在源文件中进行函数定义。
第四步,在需要运用的源文件中先声明后使用。
下面进行图示意。
第一步,建立好函数对应的头文件和源文件。
第二步,在头文件中进行函数声明。
注意:要写全,包括函数叫什么,参数是什么,函数返回类型是什么,参数类型是什么。
如果少了,则无法完成函数声明。
如果没有进行函数返回类型的书写,那么会默认为int类型。
第三步,在源文件中进行函数定义。
因为我们想完成的只是减法而已,所以直接写了函数的返回值等于x-y。实际上函数内可以写很多语句来完成我们想要的功能。
注意,如果是void类型的函数,那是没有返回值的。
而返回值大多时候都是为了让其他函数能够运用这个函数执行完的返回值,也就是进行函数的链式访问。
第四步,在需要运用的源文件中先声明后使用。
注意我们的声明书写方式。
一般自己写的头文件用双引号,自带的函数库用尖括号,两者引用方式有点不一样。双引号的是源文件和头文件在同一目录下。源文件写功能,头文件写定义。
函数声明放在头文件中,函数定义放在对应源文件中,这么写的好处就是卖给别人头文件和静态库,但是别人不知道你怎么实现的这个功能。
4·静态库
静态库需要你把自己创建的函数头文件和源文件编译运行输出静态库,运行之前需要打开项目——属性——配置类型改为静态库。如图。
静态库的使用方式:
#pragma comment(lib,"sun.lib") //静态库使用方式
把头文件和静态库卖给别人,这样对方就不知道你怎么实现的这个函数。因为你把功能写在了头文件所对应的源文件里了。
以上是跨文件声明使用的步骤,如果是同一个文件中,出现了先使用后定义的情况,如图
那么就需要在使用之前进行函数的声明。遵循先声明后使用的原则。
下一篇:从0开始学c语言-14-关于(3)函数递归、递归与迭代、栈溢出、练习求第n个斐波那契数、用递归思想求字符串的长度_阿秋的阿秋不是阿秋的博客-CSDN博客