C语言学习-第七章 利用函数实现模块化程序设计②(调用函数)

236 阅读5分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情

调用函数

函数调用的形式

函数调用的医保形式为:函数名(实参表列)

按函数调用在程序中出现的形式和为止来分,有以下3种函数调用方式:

  • 函数调用语句:把函数调用单独作为一个语句,不要求函数带回值,只要求函数完成一定的操作
  • 函数表达式:函数调用出现在另一个表达式中,要求函数带回一个确定的值以参加表达式的运算
  • 函数参数:函数调用作为另一个函数调用时的实参

函数调用时的数据传递※

  • 1.形式参数和实际参数 在调用有参函数时,主调函数和被调用函数之间有数据传递关系

定义函数时,函数名后面括号中的变量名称为“形式参数”(简称“形参”)或“虚拟参数

在主调函数中,调用一个函数时,函数名后面括号中的参数称为“实际参数”(简称“实参”)

实参可以是常量、变量或表达式

  • 2.实参和形参间的数据传递 在调用函数过程中,系统会把实参的值传递给被调用函数的形参。或者说,形参从实参得到一个值。该值在函数调用期间有效,可以参加该函数中的运算。

在调用函数过程中发生的实参与形参间的数据传递称为“虚实结合

#include <stdio.h>
// 1.先编写max函数
int max (int x, int y) { // 定义max函数,有两个参数
    int z;
    z = x > y ? x : y;
    return  z;
}
//2.在编写主函数
int main() {
//   Ⅰ.输入两个整数,要求输出其中值最大者。要求用函数来找到大数
    int max(int x, int y); // 对max函数的声明
    int a, b, c;
    printf("please enter tow integer numbers:");
    scanf("%d, %d", &a, &b);
    c = max(a, b);
    printf("max is %d\n", c);
    return 0;
}

函数调用的过程

  • 定义函数中指定的形参,函数未调用时,他们并不占用内存中的存储单元。在发生函数调用时,函数中的形参才被临时分配内存单元
  • 将实参的值传递给对应形参
  • 执行函数期间,由于形参已经有值,可以利用形参进行有关的运算
  • 通过return语句将函数值待会主调函数。如果函数不需要返回值,则不需要return 语句,这时主函数的类型应定义为void类型。
  • 调用结束,形参单元被释放。注意:实参单元仍保留并维持原值,没有改变。如果在执行一个被调用函数时,形参的值发生改变,不会改变主调函数的实参的值。这是因为实参与形参是两个不同的存储单元。

注意:实参向形参的数据传递是“值传递”,单向传递, 只能由实参传给形参,而不能由形参传给实参。实参和形参在内存中占有不同的存储单元,实参无法得到形参的值。

函数的返回值

希望通过函数调用使主调函数能得到一个确定的值,这就是函数值(函数的返回值)。如上面代码中的 c=max(a, b);

  • 函数的返回值是通过函数中的return语句获得的
  • 函数值的类型:在定义函数时指定函数值的类型
itn max (float x, float y) // 函数值为整型
char letter (char cl, char c2) // 函数值为字符型
double min (int x, int y) // 函数值为双精度型
  • 在定义函数时指定的函数类型医保应该和return语句中的表达式类型一致。 如果函数值的类型和return语句中表达式的值不一致,以函数类型为准。对数值型数据,可以自动进行类型转换。即函数类型决定返回值的类型
#include <stdio.h>
// 1.先编写max函数
int max (int x, int y) { // 定义max函数,有两个参数
    int z;
    z = x > y ? x : y;
    return  z;
}
//2.在编写主函数
int main() {
//   Ⅰ.输入两个整数,要求输出其中值最大者。要求用函数来找到大数
//    int max(int x, int y); // 对max函数的声明
//    int a, b, c;
//    printf("please enter tow integer numbers:");
//    scanf("%d, %d", &a, &b);
//    c = max(a, b);
//    printf("max is %d\n", c);

    int max2(float x, float y); // 对max函数的声明
    float a, b;
    int c;
    printf("please enter tow float numbers:");
    scanf("%f, %f", &a, &b);
    c = max2(a, b);
    printf("max is %d\n", c);
    return 0;
}
// 1.先编写max函数
int max2 (float x, float y) { // 定义max函数,有两个参数
    float z; // z定义为float类型,此时返回值的类型与指定的函数类型不同
    z = x > y ? x : y;
    return  z;
}

image.png

  • 对于不带回值的函数,应当定义函数为“void类型”(或称“空类型”)。此时在函数体中不得出现return语句

  • 为什么要用函数
  • 怎样定义函数
  • 调用函数
  • 对被调用函数的声明和函数原型
  • 函数的嵌套调用
  • 函数的递归调用
  • 数组作为函数参数
  • 局部变量和全局变量
  • 变量的存储方式和生存期
  • 关于变量的声明和定义
  • 内部函数和外部函数