一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情。
对被调用函数的声明和函数原型
Ⅰ、在一个函数中调用另一个函数(即被调用函数)需要具备的条件:
- 被调用的函数必须是已经定义的函数(是库函数或用户自己定义的函数)
- 如果使用库函数,应该在本文件开头用#include指令将调用有关库函数时所需用到的信息“包含”到本文件中来。如
#include <stdio.h> #include <math.h> - 如果使用用户自己定义的函数,而该函数的位置在调用它的函数(即主调函数)的后面(在同一个文件中),应该在主调函数中对被调用的函数作声明(declaration)
声明的作用是把函数名、函数参数的个数和参数类型等信息通知编译系统,以便在遇到函数调用时,编译系统能正确识别函数并检查调用是否合法。
#include <stdio.h>
int main() {
// Ⅱ.输入两个实数,用一个函数求出它们之和. -------- main函数在add函数之前
float add(float x, float y); // 对add函数做声明
float a, b, c;
printf("Please enter a and b:");
scanf("%f, %f", &a, &b);
c = add(a, b);
printf("sum is %f\n", c);
return 0;
}
float add(float x, float y) {
return x + y;
}
函数的声明:按照已定义的函数的首行,再加一个分号
函数原型:函数的首行(即函数首部)称为函数原型(function prototype)
Ⅱ、为什么要用函数的首部来作为函数声明呢?
-
- 这是为了便于对函数调用的合法性进行检查
-
- 用函数原型来声明函数,能减少编写程序时可能出现的错误
Ⅲ、函数声明的一般形式有以下两种:
- 1.
函数类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, ..., 参数类型n 参数名n);
函数类型 函数名(参数类型1, 参数类型2, ..., 参数类型n);
注意: 对函数的“定义”和“声明”不是同一回事。
- 函数的定义:是指对函数功能的确立,包括指定函数名、函数值类型、形参及其类型以及函数体等,它是一个完整的、独立的函数单位
- 函数的声明:作用是把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查(例如,函数名是否正确,实参与形参的类型和个数是否一致),它不包含函数体。
函数的嵌套调用
在定义函数时,一个函数内不能再定义另一个函数,即不能嵌套定义,但可以嵌套调用函数,即在调用一个函数的过程中,又调用另一个函数。
#include <stdio.h>
int main() {
// Ⅲ:输入4个整数,找出其中最大的数。(用函数的嵌套调用来处理)
int max4(int a, int b, int c, int d); // 对max4做函数声明,找出4个数中的最大者
int a, b, c, d, max;
printf("Please enter 4 integer numbers:");
scanf("%d %d %d %d", &a, &b, &c, &d);
max = max4(a, b, c, d);
printf("max = %d\n", max);
return 0;
}
// 定义max4函数,找出4个数中的最大值
int max4(int a, int b, int c, int d) {
int maxTwo(int a, int b); // 对max2作函数声明,找出2个数中的最大者
int m;
m = maxTwo(a, b);
m = maxTwo(m, c);
m = maxTwo(m, d);
return m;
}
// 找出2个数的最大值
int maxTwo(int a, int b) {
return a >= b ? a : b;
}
- 为什么要用函数
- 怎样定义函数
- 调用函数
- 对被调用函数的声明和函数原型
- 函数的嵌套调用
- 函数的递归调用
- 数组作为函数参数
- 局部变量和全局变量
- 变量的存储方式和生存期
- 关于变量的声明和定义
- 内部函数和外部函数