1. 函数是什么
我们对函数的定义是:子函数。
在计算机科学中,子程序是一个大型程序中的某部分代码, 由一个或多个语句块组
成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软
件库。
2. 函数的分类
函数分为 (1)库函数 ( 2)自定义函数。
2.1 库函数
库函数是为了支持可移植性和提高程序的效率,C语言的基础库中提供了一系列类似的库函数,方便程序员进行软件开发。
例如 (打印 printf) (拷贝 strcpy) (n的k次方运算 pow)
而为了深入了解库函数的更多用法,我们可以在www.cplusplus.com网站中进行查找。
注:使用库函数,必须包含#include对应的头文件
2.2自定义函数
显然库函数我无法满足我们是所有的需求,所以很多情况下需要我们自己设计函数来达到目的。
自定义函数和库函数一样,有函数名,返回值类型和函数参数。
ret_type fun_name(para1, * )
{
statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para1 函数参数
eg:我们写一个比较两个数大小的函数
eg.1:
#include <stdio.h>
//get_max函数的设计
int get_max(int x, int y)
{
return (x>y)?(x):(y);
}
int main()
{
int num1 = 10;
int num2 = 20;
int max = get_max(num1, num2);
printf("max = %d\n", max);
return 0;
}
此时较大值就会返回到max中。
eg.2 交换两个整形变量的内容
我们可以看到swap1函数未对a,b的数值进行交换,而swap2函数对a,b的数值进行了交换。
原因就是下面形参,实参的问题。
3.函数参数
3.1实际参数(实参)
真是传给函数的参数,叫实参。
实参可以是:常数,变量,表达式,函数
但无论是何种类型的量,都必须由确定的值,以便在调用函数时将值传给形参。
3.2形式参数(形参)
形参是函数名后括号中的变量,因为形参只有在函数被调用的时候才能实例化(分配内存单元)。
形参在函数调用后自动销毁。故形参只有在函数中才有效。
而上文第2点中的swap1是因为创建了与实参内容相同的空间,内容相同而空间不同,故而交换形参的数值,对实参没有效果,也就是所谓的传值调用。
swap2则传输了地址,从而交换了变量,即为传址调用,这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。
4. 函数可以嵌套调用,但不能嵌套定义。
5.函数的链式访问
一个函数的返回值可以作为另一个函数的参数。
eg:
int main()
{
char arr[20] = "hello";
int ret = strlen(strcat(arr,"bit"));
printf("%d\n", ret);
return 0;
}
6.函数的声明和定义
6.1函数的声明
告诉编译器,函数叫什么,返回什么,参数什么。但函数是否存在,声明无法决定。
函数的声明一般出现在函数使用之前,先声明后使用。
函数的声明一般要放在头文件里。
6.2函数的定义
函数的定义是指函数的具体实现,交待函数的功能实现。
7.函数的递归
7.1什么是递归
函数调用自身的编程技巧为递归
递归只需要很少的代码就能完成很复杂的运算,大大减少了代码量。
递归的主要思想:大事化小。
7.2递归的两个必要条件
存在限制条件,且当函数满足限制条件是,递归便不再继续。
每次递归调用后越来越接近限制条件。
递归需要大量的练习,下次我会举出几个递归的题目并给出题解。