7.2函数的声明定义,函数的分类和调用
1、函数声明要在main函数上面,这样main函数才可以进行调用
 
 第一节课主要就学了函数的调用,项目在开发的时候分工用的比较多
 主要结构:
 
 func.c里面进行函数的定义
 
 不是很重要,进行了函数的的声明,调用了需要的类库
 
 使用其他文件里面定义的函数
 
7.3函数的递归调用
自己调用自己,计算阶乘
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int func(int n)
{
    if(n==1)
    {
        return 1;
    }
    return n*func(n-1);
}
int main() {
    int n;
    scanf("%d",&n);
    printf("f(%d)=%d\n",n,func(n));
}

 一开始输入的是3,正常走进函数体里面,当走到最后一句return时,需要再次走进自己的函数体里面,此时走进去的是3-1=2,2再走走到最后有需要f(1),又走了一遍,当1进去之后,不需要再走函数体了,而是返回1,就沿着上面的路走回需要自己数据的地方去。
小练习:
 上台阶,一次上一层或者两层
 
 step(n)=step(n-1)+step(n-2)
 到达n这一层的方式只有这两个
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int step(int n)
{
    if(n==1||n==2)
    {
        //当台阶数是1时,有一种,台阶数为2时有1,1,和2两种
        return n;
    }
    return step(n-1)+step(n-2);
}
//上台阶,到第n台阶有多少种走法
int main() {
    int n;
    scanf("%d",&n);
    printf("step(%d)=%d\n",n,step(n));
}
对我自己有一个很难想清楚的点是:
 总感觉需要一个count进行计数
 
7.4局部变量和全局变量

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int i=10;//全局变量
void print(int i)
{
    printf("I am print i=%d\n",i);
}
int main() {
    printf("main i=%d\n",i);
    i=5;
    print(5);
    return 0;
}
不建议使用全局变量,全局变量在数据段,一直存在,加入定义的局部变量与全局变量名字还一样,就使用就近原则进行调用,容易造成混乱
 
 可以看到这里j是报错的
 原因:局部变量只在离他最近的大括号内有效!!!
 (我也一直以为是在所在函数体里面有效)
未完……










![【PWN · ret2libc】[2021 鹤城杯]babyof](https://img-blog.csdnimg.cn/6c95d5c7027a44daade842236b7345c9.png)




