目录
一、函数的定义
从一开始我们学习的 C++ 基础框架中,我们知道主函数其实就是一个函数,它是一个特殊函数,也是程序的开始点。
#include <iostream>
using namespace std;
int main() // 主函数,返回类型是int,函数名是main,参数列表是()
{
// 函数体
return 0; //main的返回值
}
在 int main() 这里,其返回类型是int,函数名是main,参数列表是()。总的来说,函数包括的内容有 返回类型 、 函数名称 、参数 和 函数体。
二、return 返回
我们以前所学的 return 0 是告诉计算机,该程序成功执行完毕。而非零返回值(如 return 1、return -1 等)通常表示程序异常退出,可以自己定义。另外,若函数定义为 void 型,则返回值不存在,return 语句也不存在。
例如,计算加法的函数应返回实际结果(如 return a + b),让两个数 a 和 b 相加进行返回。
函数中可以有多个 return 语句,但执行完第一个 return 后,本次调用结束。例如,下面代码是创建一个函数 fun() 来判断判断一个数是否为偶数,是则返回0,否则返回1。
#include <iostream>
using namespace std;
// 判断一个数是否为偶数,是则返回0,否则返回1
int fun(int num)
{
if (num % 2 == 0)
return 0; // 是偶数,返回0
else
return 1; // 不是偶数,返回1
}
int main() // 程序的主函数,所有 C++ 程序从这里开始执行
{
int n,result;
cin >> n;
result = fun(n); // 调用fun函数,将返回值保存到result变量
if (result == 0)
cout << n << " 是偶数";
else
cout << n << " 不是偶数";
return result; // 将判断结果作为程序的返回值
}
运行结果如下:

也可以不用返回值,例如,函数的返回类型改为 void,表示不返回任何值,同时,函数参数为 int& result(&表示引用),引用即为变量的 “别名”,如下代码:
#include <iostream>
using namespace std;
void fun(int num, int& result) // 使用引用参数int& result
{
if (num % 2 == 0)
result = 0; // 直接给引用变量赋值,会同步修改外部变量
else
result = 1;
}
int main()
{
int n;
int result;
cin >> n;
fun(n, result); // 调用函数时直接传递变量
if (result == 0)
cout << n << " 是偶数";
else
cout << n << " 不是偶数";
return result;
}
三、函数参数
(一)形参实参
形参:形式参数,定义函数时括号中的表达式。
形参、定义在函数内部的变量称为局部变量,它的作用域仅限于函数内部。
实参:实际参数,调用函数时括号中的表达式。
(二)参数默认值
下面函数 fun() 有三个参数,其中形参 b、c 有参数默认值。之后在 main 函数中进行两次调用,fun(“xiaoming”) 只提供了第一个参数,后两个参数使用默认值,而 fun(“xiaohong”,“女”,20) 提供了所有三个参数,覆盖默认值。
#include <iostream>
#include <string>
using namespace std;
void fun(string a , string b="男" , int c=18)
{
cout<< a << " " << b << " " << c << endl;
}
int main()
{
fun("xiaoming");
fun("xiaohong","女",20);
return 0;
}
运行结果如下:

四、函数调用方式
(一)传值调用
函数参数的传值调用是 传递变量副本,函数内修改不影响原变量,无论函数里怎么改,外面的原始数据都不会变。
#include <iostream>
using namespace std;
// 传值调用:函数接收的是实参的副本
void fun1(int num) //变量 num 就是形参,专门用来接收外界传进来的值
{
num = 100; // 这里修改的是副本,不影响原变量值
cout << "传值调用中修改后的值: " << num << endl;
}
int main()
{
int x = 10;
cout << "初始值: " << x << endl ;
fun1(x); // 变量 x 就是实参,传值调用
cout << "传值调用后x的值: " << x; // x的值仍为10
return 0;
}
运行结果如下,虽然传值调用 fun() 函数,但是 x 的值没有改变,改变的只是副本:

(二)指针调用
函数参数的指针调用是 传递变量地址,可通过*解引用修改原变量,调用时要加&进行取地址。
通过解引用操作(*num)可以修改原变量
需要显式使用取地址符(&x)传递参数
#include <iostream>
using namespace std;
// 指针调用:函数接收的是实参的地址
void fun2(int* num) //函数接收一个整型指针参数
{
*num = 200; //解引用指针,直接修改指针所指向的内存位置的值,修改的是原变量 x 的值,不是副本
cout << "指针调用中修改后的值: " << *num << endl;
}
int main()
{
int x = 10;
cout << "初始值: " << x << endl;
fun2(&x); // 显式使用 & 获取变量 x 的地址并传递给函数
cout << "指针调用后x的值: " << x; // x的值变为200
return 0;
}
运行结果如下,通过指针在函数内部修改外部变量的值,x 的值变为 200:

(三)引用调用
函数参数的引用调用是 传递变量别名,直接修改即可影响原变量,调用方式与传值相同。
#include <iostream>
using namespace std;
// 引用调用:函数接收的是实参的引用(别名)
void fun3(int& num)
{
num = 300; // 直接修改原变量的值,因为num是原变量的别名
cout << "引用调用中修改后的值: " << num << endl;
}
int main()
{
int x = 10;
cout << "初始值: " << x << endl;
fun3(x); // 引用调用
cout << "引用调用后x的值: " << x; // x的值变为300
return 0;
}
运行结果如下:

五、常用库函数
库函数即是 C++ 标准库中提供的一些已经定义好的函数可直接使用,需要先导入头文件。例如,最开始学习的 cin>> 、cout<<等就是头文件 iostream 里的。
字符、字符串操作的相应库函数,见字符串与数组章节:C++语言程序设计——06 字符串与数组
(一)cmath
常用的 camth 头文件内的函数里有:
1、abs(x):取绝对值(整数 / 浮点数)
2、sqrt(x):平方根
3、pow(x, y):计算 x 的 y 次方
4、round(x):四舍五入取整
5、fmax(x,y) / fmin(x,y):用于浮点数比较,取两数最大 / 最小值
6、ceil(x) / floor(x):向上取整 / 向下取整
注:向上取整,取大于或等于该数的最小整数,例如,ceil(16.66) 得到 17;
向下取整,取小于或等于该数的最大整数,例如,floor(16.66) 得到 16。
(二)algorithm
常用的 algorithm 头文件内的函数里有:
1、max(x,y) / min(x,y):取两数最大 / 最小值
2、find(begin, end, val):查找元素位置
3、sort(begin, end):对区间元素排序(默认升序)
4、reverse(begin, end):反转区间元素
19

被折叠的 条评论
为什么被折叠?



