• 【408专项篇】C语言笔记-第七章(函数)


    第一节:函数的声明与定定义

    1. 函数的声明与定义

    函数间的调用关系是:由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意次。

    #include "func.h"
    
    int main() {
        int a=10;
        a=print_star(a);
        print_message();
        print_star(a);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    #include "func.h"
    
    int print_star(int i){
        printf("***************\n");
        printf("print_start %d\n",i);
        return i+3;
    }
    
    void print_message(){
        printf("how do you do\n");
        print_star(3);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    #ifndef INC_7_1_STATEMENT_FUNC_H
    #define INC_7_1_STATEMENT_FUNC_H
    #include 
    #include 
    
    int print_star(int i);
    void print_message();
    #endif //INC_7_1_STATEMENT_FUNC_H
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    F:\Computer\Project\practice\7\7.1-statement\cmake-build-debug\7_1_statement.exe
    ***************
    print_start 10
    how do you do
    ***************
    print_start 3
    ***************
    print_start 13
    
    进程已结束,退出代码为 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    func.c是子函数print_star和print_message的实现,也称定义。main.c是main函数,func.h中存放的是标准头文件的声明和main函数中调用的两个子函数的声明。如果不在头文件中对使用的函数进行声明,那么在编译时会出现警告。

    C语言编译和执行具有以下特点:

    1. 一个C程序由一个或多个程序模块组成,每个程序模块作为一个源程序文件。这样处理便于分别编写、分别编译、进而提高调试效率。一个源程序文件可以为多个C程序公用。

    2. 一个源程序文件由一个或多个函数及其他有关内容(如命令行,数据定义等)组成。一个源程序文件是一个编译单位

    3. C程序的执行是从main函数开始的,如果在main函数中调用其他函数,那么在调用后会返回到main函数中,在main函数中结束整个程序的运行。

    4. 所有函数都是平行的,即在定义函数时是分别进行的,并且是互相独立的。一个函数并不从属于另一个函数,即函数不能嵌套定义。但函数间是可以互相调用的,即可以嵌套调用,但不能调用main函数,main函数时由系统调用的。

    函数的声明与定义的差异:

    1. 函数的定义是指对函数功能的确立,包括指定函数名、函数值类型、形参及其类型、函数体等。它是一个完整的,独立的函数单位。

    2. 函数声明的作用是把函数的名字、函数类型及形参的类型、个数和顺序通知编译系统,以便在调用该函数时编译系统能正确识别函数并检查调用是否合法。

    隐式声明:函数如果不显示地声明返回类型,那么它默认返回整型。一般都需要显示声明。

    2. 函数的分类

    函数分为两种类型:

    1. 标准函数:即库函数,这是由系统提供的,用户不必自己定义的函数,可以直接使用他们。如printf函数,scanf函数。

    2. 用户自己定义的函数:用以解决用户的专门需要。分为无参函数和有参函数

    第二节:函数的递归调用

    函数自身调用自身的操作,称为递归函数,递归函数一定要有结束条件,否则会产生死循环。

    使用递归在解决一些问题时,可以让问题变得简单,降低编程难度。

    题目:假如有n个台阶,一次只能上1个台阶或2个台阶,请问走到第n(n为正整数,可自行指定)个台阶有几种走法?

    #include 
    
    int step(int n){
        if(1==n || 2==n){  // 结束条件
            return n;
        }
        return step(n-1)+step(n-2);  // 公式
    }
    int main() {
        int n;
        int ret;
        scanf("%d",&n);
        ret=step(n);
        printf("step total=%d\n", ret);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    F:\Computer\Project\practice\7\7.2-recursion\cmake-build-debug\7_2_recursion.exe
    5
    step total=8
    
    进程已结束,退出代码为 0
    
    • 1
    • 2
    • 3
    • 4
    • 5

    方法步骤:找公式,写结束条件。

    第三节:全局变量

    1. 全局变量-形参-实参解析

    在不同函数之间传递数据时,可以使用的方法如下:

    1. 参数:通过形式参数和实际参数。
    2. 返回值:用return语句返回计算结果。
    3. 全局变量:外部变量。

    全局变量存储在数据段,所以main函数和print函数都是可见的。全局变量不会因为某个函数执行结束而消失,在整个进程的执行过程中是始终有效。工作中应尽量避免使用全局变量

    如果局部变量和全局变量重名,那么将采取就近原则,即实际获取和修改的值是局部变量的值

    全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟存储单元

    关于形参与实参的一些说明:

    1. 定义函数中指定的形参,如果没有函数调用,那么他们并不占用内存中的存储单元,只有在发生函数调用时,形参才会被分配内存单元。调用结束后,形参所占的内存单元会被释放。

    2. 实参可以是常量,变量或者表达式,但要求他们有确定的值。

    3. 形参可以有多个,使用逗号隔开。同时指定形参的类型。

    4. 实参与形参的个数相等,类型相匹配,且实参与形参按照顺序对应,一一传递。

    5. 实参向形参数据传递是单向“值传递”,只能由实参传给形参。

    6. 形参相当于局部变量,因此不能在定义局部变量与参数同名。

    2. 局部变量与全局变量

    1. 局部变量

    在一个函数内部定义的变量称为内部变量。它只在本函数范围内有效,即只有在本函数内才能使用这些变量,也称局部变量。

    局部变量的有效范围是离自己最近的花括号

    2. 外部变量

    函数之外定义的变量称为外部变量。外部变量可以为文件中的其他函数共用,它的有效范围是从定义变量的位置开始到本源文件结束,所以也称全程变量。

    C语言一般要求把程序中的函数做成一个封闭体,除可以通过“实参->形参”的渠道与外界发生联系外,没有其他渠道

  • 相关阅读:
    计算机二级WPS 选择题(模拟和解析七)
    分库分表番外:多数据源/动态数据源实现
    CoT: 思路链提示促进大语言模型的多步推理
    【Jetpack】Room 预填充数据 ( 安装 DB Browser for SQLite 工具 | 创建数据库文件 | 应用中设预填充数据对应的数据库文件 | 预填充数据库表字段属性必须一致 )
    【算法专题--链表】删除排序链表中的重复元素II -- 高频面试题(图文详解,小白一看就懂!!)
    (11)点云数据处理学习——Colored point cloud registration(彩色点注册)
    智引未来:2024年科技革新引领工业界变革与机遇
    C++ 火车调度
    Hbase,Phoenix,hive,Redis 内存数据库,220905,,
    干货 | 背熟这些 Docker 命令,面试再也不怕啦~
  • 原文地址:https://blog.csdn.net/weixin_45842494/article/details/128064701