第七课

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;
}