1 函数概述
作用:
(1)将需要多次调用的代码进行封装,方便复用,减少重复代码。
(2)将较大的程序划分为若干个程序块,每个模块实现特定的功能。
2 函数的定义
定义函数的步骤:
(1)返回值类型
(2)函数名
(3)形参列表:调用该函数时传入数据对应的形参
(4)函数体语句
(5)return 表达式:与返回值类型相匹配
语法 :
返回值类型 函数名(形参列表){
函数体语句
return表达式
}
示例:定义加法函数,实现两数求和
//函数定义
int add(int num1, int num2)
{
int sum = num1 + num2;
return sum;
}
3 函数的调用
功能:使用已定义的函数
语法:函数名(参数)
注:函数定义小括号内的参数为形参;函数调用时传入的参数为实参。
示例:
//函数定义
int add(int num1, int num2) {
int sum = num1 + num2;
return sum;
}
int main() {
int a = 1;
int b = 2;
//函数调用
int res = add(a, b);
cout << "res = " << res << endl;
return 0;
}
4 值传递
值传递:函数调用时,实参将数值传递给形参
注:值传递(实参传递给形参)时,形参的改变,不会影响实参。
示例:两数互换
void swap(int num1, int num2)
{
cout << "交换前:" << endl;
cout << "num1 = " << num1 << endl;
cout << "num2 = " << num2 << endl;
int temp = num1;
num1 = num2;
num2 = temp;
cout << "交换后:" << endl;
cout << "num1 = " << num1 << endl;
cout << "num2 = " << num2 << endl;
//return ; //当函数声明不需要返回值时,可以省去return
}
int main() {
int a = 10;
int b = 20;
//值传递(实参传递给形参)时,形参的改变,不会影响实参
swap(a, b);
cout << "main函数中的 a = " << a << endl; //10
cout << "main函数中的 b = " << b << endl; //20
return 0;
}
5 函数的常见形式
常见的函数形式有4种:
(1)无参无返
(2)有参无返
(3)无参有返
(4)有参有返
6 函数声明
作用: 提前告知编译器函数的名称与调用方式。函数的实际主体可进行单独定义。
语法:返回值类型 函数名(形参列表);
注1:函数声明可以有多次,但函数定义只能有一次。
注2:函数定义在main函数之前时,函数声明可以不存在;函数定义在main函数之后时,函数声明必须存在。
示例:声明可以多次,定义只能一次
//函数声明(可有多次)
int max(int a, int b);
int max(int a, int b);
//函数定义(只能一次)
int max(int a, int b)
{
return a > b ? a : b;
}
int main() {
int a = 100;
int b = 200;
cout << max(a, b) << endl;
return 0;
}
7 函数的分文件编写
作用:使代码结构更清晰。
函数分文件编写的4个步骤:
(1)创建后缀名为.h
的头文件 ;
(2)创建后缀名为.cpp
的源文件;
(3)在头文件中写函数声明;
(4)在源文件中写函数定义及包含头文件。
示例:
/* swap.h头文件 */
#include<iostream>
using namespace std;
//函数声明
void swap(int a, int b);
/* swap.cpp源文件 */
//包含头文件
#include "test.h"
//函数定义
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
/* main函数的源文件 */
//包含头文件
#include "test.h"
int main() {
int a = 10;
int b = 20;
swap(a, b);
return 0;
}