1.函数是什么
函数在维基百科中定义为:子程序
一般会有参数并有返回值,在C语言中,函数分为库函数和自定义函数。
2.库函数
在平时编程时,我们基本都会用到例如输入和输出的函数,为了支持可移植性和提高程序的效率,所以C语言的基础库中提供了一系列的库函数,方便程序员进行软件开发。
3.自定义函数
就是需要我们自己去定义函数名,返回类型和参数的,格式如下:
返回类型 函数名(参数)
{
内容
}
4.函数的参数
1.实际参数
真实传给函数的参数,叫做实参,实参可以是:常量,变量,表达式,函数等。无论实参是何种类型的量,在进行函数调用时,他们都必须有确定的值,以便把这些值传给形参。
2.形式参数
是函数名后括号中的变量,因为形式参数只有在被调用的过程中才实例化,当函数调用完之后就自动销毁了,因此形式参数只在函数中有效。
``下面以一个例子来加快了解形式参数和实际参数之间的关系:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void swap1(int x, int y)
{
int tmp = 0;
tmp = x;
x = y;
y = tmp;
}
void swap2(int* px, int* py)
{
int tmp = 0;
tmp = *px;
*px = *py;
*py = tmp;
}
int main()
{
int num1 = 1;
int num2 = 2;
swap1(num1, num2);
printf("%d %d\n", num1, num2);
swap2(&num1, &num2);
printf("%d %d\n", num1, num2);
return 0;
}
程序的运行结果如上图,
用函数swap1并没有交换两个值,而swap2却可以,比较两个函数可知,他们的形参有所不同,这是因为第二个函数是把两个数的地址传给了他,形式参数实例化后相当于实际参数的临时拷贝,但对形式参数的修改并不会改变实参,他们是独立的两个部分。
5.函数的声明定义
声明
1.告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,但具体存不存在无关紧要。
2.函数的声明一般出现在函数使用之前
3.函数的声明一般要放在头文件中的
定义
是指函数的具体实现,交代函数的功能实现。
6.函数的递归
定义
程序调用自身的编程技巧叫做递归。他通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归的主要思想是把大事化小。
两个必要条件:
1.存在限制条件,当满足这个条件时,递归便不再继续
2.每次递归调用之后越来越接近这个限制条件。
例如求斐波那契数时,
int fib(int n)
{
if (n <= 2)
return 1;
else
return fib(n - 1) + fib(n - 2);
}
从最后返回的值来看,是前两个数值的和,就是在函数中调用自己。