第七课
1,函数定义语法
返回类型 函数名(参数列表)
{
函数体;
return 与返回类型相同类型的值//若为void类型,则无
}
2,形参和实参
1,形参:函数'定义'时()内的变量,类似定义变量的语句;如:int a(int s,int d);//s和d就是形参
2,实参:函数'调用'时()内的传入的参数;
3,变量的作用域和生命周期
1,作用域:变量的作用范围(在何处能够访问到变量)【采用就近原则】
2,全局变量:定义在所有函数之外的变量,定义之后,都可以访问,且数据共享(内存只占一块)
//生命周期:从定义开始到程序结束
3,局部变量:在函数或者代码块里面定义的变量
//生命周期:从定义开始到函数或代码块结束
4,内存存储类别【注意:静态变量和全局变量自动初始化为0】
存储类别 | 自动型 | 静态型 | 寄存型 | 外部型 |
---|---|---|---|---|
关键字 | aoto | static | register | extern |
5,内部函数和外部函数
1,函数的存储类型为static型,称为内部函数(静态函数)【该函数只能在其所在的文件中使用】
形式:static 返回类型 函数名(形参)
2,函数的存储类型为extern型,称为外部函数【该函数能被其他源文件调用】
【若使用外部变量,也需在使用前加extern】
6,内存四区
栈区(stack) | 存放函数的参数,局部变量等,由编译器自动释放 |
---|---|
堆区(heap) | 动态申请的内存放在堆区,若不释放,程序结束后,操作系统会回收 |
全局区(static)又称静态区 | 全局变量和静态变量的存储是放在一块的,里面细分有一个常量区,字符串常量和其他常量也存放在此,编译器不会自动释放,该区域在程序结束后由操作系统释放 |
代码区 | 存放函数体的二进制代码 |
7,递归函数
1,递归:函数自己调用自己//注意:递归需要退出条件,否则会发生栈溢出
//例子【斐波拉契数列求第n项的值】:1 1 2 3 5 8 13 ...公式:f(n)=f(n-1)+f(n-2);
#include<stdio.h>
int fobonacci(int n)
{
//确定出口
if(n==1||n==2)
{
return 1;
}
else
{
return fobonacci(n-1)+fobonacci(n-2);
}
}
int main()
{
int n;
scanf("%d",&n);
printf("%d ",fobonacci(n));
return 0;
}