【C语言入门】函数
文章目录
十、函数
1 函数、函数的分类与特点
1.1 什么是函数
将实现某一特定功能的代码封装成为一个整体,称为函数(function),并提供对外的接口,提高了代码的复用性。
1.2 函数的分类
-
库函数 – C语言提供的函数
-
自定义函数 – 程序员自己编写的函数
1.3 函数的特点
-
简化代码
-
代码复用
2 函数的声明、定义与调用
2.1 函数声明
函数声明:告诉编译器有一个函数,它的函数名是什么、它有什么函数参数、它的返回值类型是什么。
int Add(int, int);
注意:
1 这样的形式也称为函数原型,它是一种声明形式,用来告知编译器在程序中要使用该函数。函数原型也被称为函数声明。
2 函数可以声明多次。
3 函数在声明的时候可以省略形参名,只保留形参的类型。
2.2 函数定义
函数定义:创建函数的具体实现。(也就是函数的创建方法)
int Add(int x, int y)//函数头部
{
return x + y;
//函数体--大括号范围内的
}
注意:
1 函数定义由多个部分构成,包括函数头部和函数体。
2 函数头部(function header):表示函数的名称和格式。包含:返回类型、函数名、形参声明。
返回类型(return type):函数返回的值 —— 返回值(return value) 的类型。
函数名(function name):函数的名称。
形参声明(parameter type list):小括号括起来的部分,是用于接收辅助性提示的变量——形式参数(parameter) 的声明。多个形参之间使用逗号隔开。
3 函数体(function body):
所有的C函数都使用花括号标记函数体的开始和结束。(这是规定,不能省略)
函数体是复合语句。仅在某个函数中使用的变量,原则上应该在该函数中声明和使用。
要注意不能在函数体内声明与形参同名的变量,否则会发生变量名冲突的错误。
2.3 函数调用
函数调用就是在使用函数。(使用函数的过程,称为“函数调用”)
函数调用的形式:在函数名后面加上小括号。这个小括号称为函数调用运算符(function call operator)。
Add(2, 3)//函数调用表达式
解释说明:
1 函数调用表达式(function call expression):使用函数调用运算符的表达式称为函数调用表达式。
函数调用运算符括起来的是实参(argument)。当实参不止一个时,使用逗号将其分隔开。
2 函数调用解释流程:
1.进行函数调用后,程序的流程将一下子跳转到该函数定义处。主调函数的执行将暂时中断。
2.在被调函数的一方,会生成用于形参的变量,并赋予其实参的值。
3.形参的初始化完成后,将执行函数体。程序流在遇到 return
语句(return statement),或者执行到函数体最后的大括号 {}
时,就会从该函数跳转到调用函数的位置。
4.也就是说,当return
语句执行结束后,程序流将返回到原来进行调用的地方,再次执行被中断的主调函数。同时,return 后面的表达式的值会被返回。
5.返回值是通过对函数调用表达式进行判定而得到的。会判定并获得返回值的类型和数值。
6.函数调用的时候传递的只是参数的值,因此调用函数时使用的实参既可以是变量,也可以是常量。
7.实参和形参是完全不同的两个东西,因此不用担心实参和形参名字相同的问题。(实参和形参的名字可以相同)
8.函数返回的是“表达式” 值。不能返回两个及以上的值。
3 注意事项
注意1:进行函数调用后,程序的流程会转到被调用的函数处。这时,传递过来的实参的值会被赋给函数接收的形参。
注意2:对函数调用表达式进行判定的时候,会得到该函数返回的返回值。
注意3:形参只是实参的一份临时拷贝,形参的改变不会影响实参的值。
3 示例
输入两个数,输出两数的和
3.1 普通写法
#include<stdio.h>
int main()
{
//求两数之和
int num1 = 0;
int num2 = 0;
int sum = 0;
//输入
printf("输入两个操作数:>\n");
scanf("%d %d", &num1, &num2);
//计算
sum = num1 + num2;
//输出
printf("两数之和为:>\n%d\n", sum);
return 0;
}
解释说明:
1 scanf
函数是有返回值的,读取成功时返回的是读取到的数据的个数,读取失败时会返回EOF。
EOF:End Of File
,是文件结束标志。在VS2019中被这样定义:#define EOF -1
3.2 函数写法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//函数声明
int Add(int, int);//函数声明可以省略形参名
int Add(int x, int y);//函数可以声明多次
//函数定义
//int Add(int x, int y)
//{
// int z = x + y;
// return z;
//}
//简化写法
int Add(int x, int y)
{
return x + y;
}
int main()
{
//求两数之和
int num1 = 0;
int num2 = 0;
int sum = 0;
//输入
printf("输入两个操作数:>\n");
scanf("%d %d", &num1, &num2);
//计算
sum = Add(num1, num2);//在main函数中调用Add函数实现->求取两数之和
//输出
printf("两数之和为:>\n%d\n", sum);
return 0;
}
解释说明:
1 sum = Add(num1, num2);
其中 Add(num1, num2)
为函数调用,num1
、num2
为传入 Add
函数的实参。
2 int Add(int x, int y) { return x + y; }
函数的定义(具体实现)。当调用 Add
函数后,形参会接收来自实参的值,也就是说形参和实参都有各自的存储空间,互不干扰。
总结:
本节介绍了什么是函数以及函数的分类和特点;讲解了什么是函数的声明、定义以及如何调用函数。
感谢您的阅读!如有任何错误,欢迎您的批评指正!