引言:接入上次的函数(1)(http://t.csdn.cn/Xc5Ej),我们已经初步认识和学习了C语言中的函数。今天我们继续进行函数的探索。
目录
一、函数的嵌套调用和链式访问
函数嵌套调用:
在C语言中,函数的嵌套调用可以实现多个函数之间的调用关系。当一个函数内部调用另一个函数时,可以将其视为一个表达式或语句的一部分。函数嵌套调用遵循栈的原则,即每个函数调用会创建一个新的函数栈帧。以下是一个函数嵌套调用的示例:
#include <stdio.h> void funcC() { printf("This is function C\n"); } void funcB() { printf("This is function B\n"); funcC(); // 嵌套调用函数C } void funcA() { printf("This is function A\n"); funcB(); // 嵌套调用函数B } int main() { funcA(); // 嵌套调用函数A return 0; }
以上代码中,函数
funcA
调用了函数funcB
,funcB
又调用了函数funcC
,最终在main
函数中调用了funcA
。程序的执行过程为main -> funcA -> funcB -> funcC
,每次调用都会进入新的函数栈帧,执行完毕后返回上一级函数栈帧。值得注意的是:函数之间可以嵌套调用,但是不能嵌套定义
函数的链式访问:
把一个函数的返回值作为另一个函数的参数
#include <stdio.h> #include<string.h> int main(){ char arr1[20] = {0}; char arr2[] = "abc"; printf("%d\n", strlen(strcpy(arr1, arr2)));//链式访问 }
上面的代码中strcpy函数的返回值是strlen的参数,strlen的返回值是printf函数的参数,这就叫做函数的链式访问。
二、函数的声明和定义
函数的声明
1.声明指的是告诉编译器有一个函数(包括函数叫什么,参数,返回类型),但具体存不存在,声明并不能决定。
2.函数的声明一般在函数的使用之前,要满足先声明后使用。
3.函数的声明一般要放在头文件中。
函数的定义
函数的定义一般是指函数功能的实现。
未来在工程中,代码一般是比较多的,所以我们一般将函数的声明放在.h文件中,函数的实现一般放在.c文件中。
三、函数的递归
1、什么是递归?
程序调用自身的编程技巧称为递归
递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可以描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递归主要思考:把大事化小
2、递归的两个必要条件
- 限制条件,要能让函数最终可以停下来
- 趋近条件,要让每次递归都更接近限制条件
例: