欢迎光临
我们一直在努力

函数初讲解

一、什么是C语言函数?

函数本质上就是一段“封装好的、可重复使用的代码块”,它接收输入(参数),执行特定操作,最后返回一个结果(返回值)。

举个生活中的例子:你想煮一碗面,“煮面”就是一个函数——输入是“面条、水、调料”(参数),执行“烧水、下面、放调料”的操作,输出是“一碗煮熟的面”(返回值)。以后不管你想煮多少次面,不用再重复步骤,直接调用“煮面”这个函数就行。

在C语言中,函数的作用就是“简化代码、提高复用性、降低维护成本”。比如你写一个计算两数之和的代码,以后每次需要计算和,不用再写一遍加法语句,直接调用求和函数即可。

二、函数的基本结构

C语言中,函数的定义格式固定,分为3个核心部分:返回值类型、函数名、参数列表,再加上函数体。

// 函数定义格式
返回值类型 函数名(参数列表) {
    // 函数体:要执行的代码
    return 返回值; // 与返回值类型对应,无返回值则省略(或写return;)
}

逐个拆解说明,新手必看:

  • 返回值类型:函数执行完成后,返回给调用者的数据类型。比如计算和,返回值是int(整数);判断真假,返回值是bool(布尔值);如果不需要返回任何结果,就用void(无返回值)
  • 函数名:给函数起的名字,遵循C语言命名规则(字母、数字、下划线组成,不能以数字开头,区分大小写),建议起得“见名知意”,比如求和函数叫add,求最大值叫max,不要起a、b、c这种无意义的名字
  • 参数列表:函数接收的输入数据,格式是“数据类型 参数名”,多个参数用逗号分隔。如果不需要接收参数,参数列表可以写void,特别注意 void*可以接收任意类型的参数
  • 函数体:用{}包裹的代码,是函数的核心,执行具体的操作
  • return语句:将结果返回给调用者,返回值的类型必须和“返回值类型”一致。如果是void类型,return语句可以省略
  • 三、函数的分类(按用途划分)

    C语言中的函数主要分为3类,新手重点掌握前两类即可:

    1. 库函数

    C语言标准库已经封装好的函数,不需要我们自己定义,只要包含对应的头文件,就可以直接调用。这是新手最常用的函数,节省大量开发时间

    常见库函数示例(附使用场景):

    • 输入输出函数:printf(打印)、scanf(输入),头文件<stdio.h>
    • 字符串函数:strlen(求字符串长度)、strcpy(字符串复制),头文件<string.h>
    • 数学函数:sqrt(求平方根)、pow(求幂),头文件<math.h>

    注意:使用库函数必须包含对应的头文件,否则会报错。比如用printf,必须在代码开头写#include <stdio.h>

    2. 自定义函数

    库函数不能满足所有需求,这时我们就需要自己定义函数,比如实现一个“判断素数”“计算阶乘”的函数。这也是面试中常考的重点,新手一定要多练。

    自定义函数实战示例(3个高频案例,直接复制可运行):

    3.主函数

    每个C语言程序都必须有且只有一个main函数,它是程序的入口,程序从main函数开始执行,其他函数必须被main函数(或其他被main调用的函数)调用才能执行。

    注意:main函数的返回值类型通常是int,返回0表示程序正常结束,返回非0表示程序异常结束(一般不用纠结,写return 0;即可)。

    三.函数的调用流程

    很多新手会混淆函数的定义和调用,这里用一个通俗的例子讲清楚流程,结合案例2的add函数:

  • 程序启动,从main函数开始执行,执行到“int result = add(num1, num2);”时,暂停main函数的执行。
  • 跳转到add函数,将num1(10)赋值给a,num2(20)赋值给b,执行函数体中的代码,计算sum = 30。
  • 执行return sum;,将30返回给main函数的调用处,赋值给result变量。
  • main函数恢复执行,继续执行printf语句,打印结果,最后执行return 0;,程序结束。
  • 核心要点:函数调用时,是“暂停当前函数,执行被调用函数,执行完再回到当前函数继续执行”,就像你看书时,看到一个不懂的词,去查字典(调用字典函数),查完再回到书里继续看。

    四、函数的常见坑点

    整理了4个新手最容易踩的坑,每个坑都附错误示例和正确示例,帮你避开弯路:

    坑点1:函数未定义就调用

    错误示例:

    #include <stdio.h>

    int main() {
        add(10, 20); // 错误:add函数还没定义,编译器不认识
        return 0;
    }

    int add(int a, int b) {
        return a + b;
    }

    正确做法:要么将函数定义放在main函数之前,要么在main函数之前写“函数声明”(告诉编译器函数的存在)

    函数声明格式:返回值类型 函数名(参数列表);(不用写函数体)

    #include <stdio.h>

    // 函数声明
    int add(int a, int b);

    int main() {
        add(10, 20); // 正确:编译器已知add函数的存在
        return 0;
    }

    // 函数定义
    int add(int a, int b) {
        return a + b;
    }

    坑点2:返回值类型与return语句不匹配

    错误示例:函数返回值类型是int,但return返回了字符串

    #include <stdio.h>

    int add(int a, int b) {
        return "123"; // 错误:返回值是字符串,与int类型不匹配
    }

    int main() {
        printf("%d", add(10, 20));
        return 0;
    }

    正确做法:return返回的值,类型必须和函数定义的“返回值类型”一致

    坑点3:参数个数/类型不匹配

    错误示例:函数定义需要2个int参数,但调用时只传了1个,或传了一个float参数

    #include <stdio.h>

    int add(int a, int b) {
        return a + b;
    }

    int main() {
        add(10); // 错误:参数个数不够
        add(10.5, 20); // 错误:第一个参数是float,与int不匹配
        return 0;
    }

    正确做法:调用函数时,参数的个数、类型必须和函数定义的参数列表完全一致

    坑点4:void函数写了返回值

    错误示例:

    #include <stdio.h>

    void welcome() {
        return "欢迎"; // 错误:void函数不能返回任何值
    }

    int main() {
        welcome();
        return 0;
    }

    正确做法:void函数要么不写return,要么只写return;(无返回值)

    赞(0)
    未经允许不得转载:171主机测评 » 函数初讲解
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址