什么是函数

函数(function)是完成特定任务的独立程序代码单元。语法规则定义了函数的结构和使用方式。如printf()、scanf()、getchar()、putchar()和 strlen()。

函数作用

  1. 提高代码的复用性
  2. 提高程序代码的可读性方便后期修改、完善
  3. 模块化业务逻辑

    函数原型

    image.png

    参数理解

    示例: ```c

    include

    include

int calculate(int x, int y); int main(void) { int a, b, result;

  1. printf("请输入两个数进行相加:\n");
  2. scanf("%d%d", &a, &b);
  3. result = calculate(a, b);
  4. printf("%d", result);
  5. return 0;
  6. system("pause");

}

int calculate(int x, int y) { int ret; ret = x + y; return ret; } ```

  • 形式参数

上面主函数calculate()中的 int x 和 int y 就是形式参数简称“形参”。

  • 形参也是局部变量,属该函数私有。这意味着在其他函数中使用同名变量不会引起名称冲突,每次调用函数,就会给这些变量赋值。
  • 形参的定义必须加上数据类型
    • 实际参数

上面主函数main()中的a,b为实际参数简称“实参”,是用户实实在在输入的值

  • 区别

实际参数是出现在函数调用圆括号中的表达式。形式参数是函数定义的函数头中声明的变量。调用函数时,创建了声明为形式参数的变量并初始化为实际参数的求值结果。

  • 由于“形参”和“实参”都是概念,而在实际中,实参只是把值传给了形参,而非变量也被传入并参与计算。

    函数调用参数

    如上例所示11行代码,实际参数可以是常量、变量,或甚至是更复杂的表达式。无论实际参数是何种形式都要被求值,然后该值被拷贝给被调函数相应的形式参数。

    两种调用方式:

  • 传值调用: 该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。

  • 引用调用: 通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。

默认情况下,C 使用传值调用来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的实际参数。

函数返回值

  • 在上述示例中 return ret 即把calculate()函数中的运算结果返回给调用者
  • 当程序执行到return语句时会立即停止,所以return后的语句不会在执行。
  • 返回值不一定是变量的值,也可以是任意表达式的值,如:return x+y;

    易错知识点

    int main () 和 int main (void)区别

    前者表示告诉编译器函数中有参数,但是是未知个数。
    后者即没有参数。

    calculate(a, b)和calculate((a, b))区别

    前者表示为函数中有两个参数,其中逗号为连接符。
    后者为一个参数,逗号表示为运算符。

    函数能否嵌套定义函数

    不能

    return 0的含义

    在普通的函数中return 0 即返回给函数调用者一个 int类型的值为0,而在main函数中return 0返回给操作系统一种状态,操作系统可以根据这个返回值判断你的程序执行状态。
    测试示例:

  • Windows CMD/PowerShell:if error level 1 …(非0为真)

  • Linux Bash:echo $?
  • Csh:echo $status

image.pngimage.png