9.1 函数的原型和调用
在使用一个函数前必须定义或者声明函数。
9.2 函数的形参与实参
在调用函数的时候,函数大多数都有参数,主调函数和被调用函数之间需要传递数据。
在定义函数时函数名后面括弧中的变量名称为“形式参数”,简称形参。在调用函数时,函数名后面括号中的变量或表达式称为“实际参数”,简称实参。
1 形参在未出现函数调用时,他们并不占用内存单元,只有在发生函数调用的时候形参才被分配内存,函数调用完成后,形参所占的内存被释放;
2 实参可以是变量,常量或者表达式;
3 在定义函数时,一定要指定形参的数据类型;
4 形参与实参的数据类型一定要可兼容;
5 在C语言中,实参与形参的数据传递是“值传递”,即单向传递,只由实参传递给形参,而不能由形参传递给实参。
如果函数的参数是个数组,那么是可以通过形参修改实参的值的。
9.3 函数的返回类型与返回值
1 函数的返回值通过函数中的return获得,如果函数的返回值为void可以不需要return语句;
2 函数return语句中的返回值数据类型应该与函数定义时相同;
3 如果函数中没有return语句,那么函数将返回一个不确定的值。
如果C语言一个函数没有明确的标明函数的返回类型,那么函数的返回类型就是int;
如果一个函数没有返回值,那么函数的返回类型是void;
9.4 main函数与exit函数与函数的return语句
exit(0); //在子函数中调用exit同样代表程序终止,但在子函数中调用return只是子函数终止,程序正常执行。
exit是C语言的库函数,调用exit的结果就是程序终止,在main函数中调用exit与调用return是一样的;
main函数return代表程序终止。
9.5 多个源代码文件程序的编译
9.5.1 头文件的使用
如果把main函数放在第一个文件中,而把自定义函数放在第二个文件中,那么就需要在第一个文件中声明函数原型。
如果把函数原型包含在一个头文件里,那么就不必每次使用函数的时候都声明其原型了。把函数声明放入头文件是很好的习惯。
9.5.2 #include与#define的意义
#include就是简单的文件内容替换
#define就是简单的文件替换而已
9.5.3 #ifndef 与#endif
在头文件.h中,
#ifndef 宏名
#define 宏名//具体宏的名字是自定义的
//函数的声明
#endif
作用:防止多次include的同一个头文件的时候,重复预编译头文件内容
防止头文件被重复包含
#ifndef的意思就是条件预编译,如果#ifndef后面的条件成立,那么就预编译从#ifndef开始到#endif之间的代码,否则不会去预编译这段代码。
在#ifndef中的宏,一定要大写和下划线,必要的时候加数字,目的是为了避免和其他头文件中的宏名字冲突。
#ifdef,#ifndef叫条件编译语句;
#ifdef 宏,如果宏被定义了,那么编译语句;
#ifndef 宏,如果宏被定义了,那么就不编译语句。
9.6 函数的递归
函数可以调用自己,这就叫函数的递归。
#include <stdio.h>
void test(int n)
{
if(n > 0)
{
n --;
printf("先序n = %d\n",n);//先序递归,如果是先序递归,那么代码是顺序执行的
test(n);//函数自己调用自己,就叫函数的递归
printf("后序n = %d\n",n);//后序递归,如果是后序递归,那么代码是逆序执行的
}
}
int main()
{
int i = 3;
test(i);
return 0;
}
9.6.1 递归的过程分析
案例:将十进制转换为二进制
#include <stdio.h>
void test(int n)
{
int i = n % 2;
printf("%d\n",i);
if(n > 0)
{
test(n / 2);
}
}
int main()
{
int i = 11;
test(i);
return 0;
}
斐波那契数列例子:
斐波那契数列指的是这样一个数列0,1,1,2,3,5,8,13,21,34,55,89,144,…
第0项是0,第1项是第一个1;
这个数列从第2项开始,每一项都等于前两项之和。
int fib(int n)
{
if (n == 0)
return 0;
if (n == 1)
return 1;
else
{
return fib(n - 1) + fib(n - 2);
}
}
9.6.2 递归的优点
递归给某些编程问题提供了最简单的方法。
9.6.3 递归的缺点
一个有缺陷的递归会很快耗尽计算机的资源,递归的程序难以理解和维护。
写在最后:最近和朋友一起在微信公众号做一些自己热爱的东西,并有许多的干货分享,大家多多关注啊!!
公众号 [越陌的数字生活]