一起养成写作习惯!这是我参与「掘金日新计划 · 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;
}
- 对于不带回值的函数,应当定义函数为“void类型”(或称“空类型”)。此时在函数体中不得出现return语句
- 为什么要用函数
- 怎样定义函数
- 调用函数
- 对被调用函数的声明和函数原型
- 函数的嵌套调用
- 函数的递归调用
- 数组作为函数参数
- 局部变量和全局变量
- 变量的存储方式和生存期
- 关于变量的声明和定义
- 内部函数和外部函数