📚 函数的概念
函数是一段可重复使用的代码块,用于完成特定的任务。通过使用函数,可以将程序划分为多个模块,提高代码的可读性、可维护性和复用性。
在C++中,函数由函数头和函数体组成。函数头包含函数的返回类型、函数名和参数列表,函数体则包含了具体的代码实现。
🧱 函数基础
下面是一个简单的函数示例,用于计算两个整数的和:
#include <iostream>
using namespace std;
// 函数定义
int sum(int a, int b) {
int result = a + b;
return result;
}
int main() {
// 函数调用
int num1 = 5;
int num2 = 10;
int result = sum(num1, num2);
cout << "两个整数的和是:" << result << endl;
return 0;
}
在上述示例中,我们定义了一个名为sum
的函数,它接收两个整数参数a
和b
,并返回它们的和。在main
函数中,我们调用了sum
函数,并将其返回值赋给result
变量,最后输出结果。
🎯 形参和实参
在函数定义中,函数的参数被称为形式参数(或简称为形参)。在函数调用时,我们提供的具体数值被称为实际参数(或简称为实参)。形参和实参的值可以通过参数传递机制进行传递。
例如,我们有一个函数add
,它接收两个参数x
和y
,用于计算它们的和:
#include <iostream>
using namespace std;
// 函数定义
int add(int x, int y) {
int result = x + y;
return result;
}
int main() {
// 函数调用,传递实参
int a = 5;
int
b = 10;
int sum = add(a, b);
cout << "两个数的和是:" << sum << endl;
return 0;
}
在上述示例中,add
函数的形参是x
和y
,而在main
函数中的函数调用中,a
和b
是add
函数的实参。
📞 函数的调用
✨直接调用
最常见的函数调用方式是直接调用。直接调用是指直接通过函数名和参数列表来调用函数。
示例:
#include <iostream>
using namespace std;
// 函数定义
void sayHello() {
cout << "Hello, World!" << endl;
}
int main() {
// 函数调用
sayHello();
return 0;
}
在上述示例中,我们定义了一个名为sayHello
的函数,它不接收任何参数,也没有返回值。在main
函数中,我们通过直接调用sayHello
函数来输出"Hello, World!"。
✨ 嵌套调用
函数之间可以相互调用,即一个函数中调用另一个函数,这种调用方式称为嵌套调用。
示例:
#include <iostream>
using namespace std;
// 函数定义
void printNumber(int num) {
cout << "数字为:" << num << endl;
}
void printSum(int a, int b) {
int sum = a + b;
cout << "两个数字的和为:" << sum << endl;
printNumber(sum);
}
int main() {
// 函数调用
int x = 5;
int y = 10;
printSum(x, y);
return 0;
}
在上述示例中,我们定义了两个函数printNumber
和printSum
。printNumber
函数用于输出一个数字,printSum
函数用于计算两个数字的和,并调用printNumber
函数来输出和的值。
✨ 递归调用
递归调用是指函数自己调用自己的调用方式。递归函数通常包含一个终止条件,用于结束递归调用。
示例:
#include <iostream>
using namespace std;
// 递归函数定义
void countdown(int n) {
// 终止条件
if (n == 0) {
cout << "Blastoff!" << endl;
} else {
cout << n << " ";
countdown(n - 1); // 递归调用
}
}
int main() {
// 函数调用
countdown(5);
return 0;
}
在上述示例中,我们定义了一个名为countdown
的递归函数,它用于倒数输出数字。当倒数到达0时,函数输出"Blastoff!",否则继续递归调用countdown
函数。
🔀 函数的参数传递
函数的参数传递方式决定了在函数调
用中,实参和形参之间是如何进行数据传递的。C++中常用的参数传递方式包括值传递、指针传递和引用传递。
✨ 值传递
值传递是指在函数调用时,将实参的值复制给形参。在函数内部,对形参的修改不会影响到实参的值。
示例:
#include <iostream>
using namespace std;
// 函数定义
void changeValue(int num) {
num = 10; // 修改形参的值
}
int main() {
// 函数调用
int x = 5;
changeValue(x);
cout << "x的值为:" << x << endl;
return 0;
}
在上述示例中,changeValue
函数的形参num
被赋予了实参x
的值。在函数内部,我们尝试修改num
的值为10,但这不会影响到实参x
的值。
✨ 指针传递
指针传递是指在函数调用时,将实参的地址传递给形参。通过使用指针,可以在函数内部直接修改实参的值。
示例:
#include <iostream>
using namespace std;
// 函数定义
void changeValue(int* ptr) {
*ptr = 10; // 修改指针所指向的变量的值
}
int main() {
// 函数调用
int x = 5;
changeValue(&x);
cout << "x的值为:" << x << endl;
return 0;
}
在上述示例中,changeValue
函数的形参ptr
是一个指向整数的指针。在函数内部,我们通过解引用ptr
来修改所指向的变量的值,从而影响到实参x
的值。
✨ 引用传递
引用传递是指在函数调用时,将实参的引用传递给形参。通过使用引用,可以在函数内部直接修改实参的值,并且代码更加简洁易读。
示例:
#include <iostream>
using namespace std;
// 函数定义
void changeValue(int& ref) {
ref = 10; // 修改引用所引用的变量的值
}
int main() {
// 函数调用
int x = 5;
changeValue(x);
cout << "x的值为:" << x << endl;
return 0;
}
在上述示例中,changeValue
函数的形参ref
是对整数的引用。在函数内部,我们直接通过修改ref
所引用的变量的值来影响到实参x
的值。
✨ 数组传递
数组传递是指在函数调用时,将数组的地址传递给形参。通过使用数组的地址,可以在函数内部访问和修改数组元素的值。
示例:
#include <iostream>
using namespace
std;
// 函数定义
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
// 函数调用
int myArray[] = {1, 2, 3, 4, 5};
int size = sizeof(myArray) / sizeof(myArray[0]);
printArray(myArray, size);
return 0;
}
在上述示例中,printArray
函数接收一个整数数组arr
和数组的大小size
作为参数。在函数内部,我们通过遍历数组来输出数组的元素。
✨ 为参数默认值
在C++中,可以为函数的参数设置默认值。如果在函数调用时没有提供对应的实参,将使用默认值作为实参。
示例:
#include <iostream>
using namespace std;
// 函数定义,设置默认值
void printNumber(int num = 0) {
cout << "数字为:" << num << endl;
}
int main() {
// 函数调用
printNumber(); // 使用默认值
printNumber(10); // 提供实参
return 0;
}
在上述示例中,printNumber
函数的形参num
设置了默认值为0。在函数调用时,如果没有提供实参,将使用默认值;如果提供了实参,则使用实参的值。
♻️ 函数的重载
函数重载是指在同一个作用域内,可以定义多个同名函数,但它们的参数列表必须不同。函数重载通过参数的类型、个数或顺序的不同来实现。
示例:
#include <iostream>
using namespace std;
// 函数重载
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int main() {
// 函数调用
int sum1 = add(5, 10);
double sum2 = add(2.5, 3.7);
cout << "整数相加的结果为:" << sum1 << endl;
cout << "浮点数相加的结果为:" << sum2 << endl;
return 0;
}
在上述示例中,我们定义了两个名为add
的函数,它们的参数列表分别是两个整数和两个浮点数。通过函数重载,我们可以根据传入的参数类型选择相应的函数进行调用。
📝 函数模板
函数模板是一种通用的函数定义,可以在不同的数据类型上进行操作。通过使用函数模板,可以编写出适用于多种类型的函数。
示例:
#include <iostream>
using namespace std;
// 函数模板定义
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
int main() {
// 函数调用
int num1 = 5, num2 = 10;
double x = 3.5,
y = 4.7;
int maxInt = max(num1, num2);
double maxDouble = max(x, y);
cout << "整数的最大值为:" << maxInt << endl;
cout << "浮点数的最大值为:" << maxDouble << endl;
return 0;
}
在上述示例中,我们定义了一个名为max
的函数模板。通过typename T
声明了一个模板参数,用于表示待确定的数据类型。在函数体内部,我们比较两个参数的大小,并返回较大的值。
在main
函数中,我们分别调用了max
函数模板,并传入了不同类型的实参。编译器根据实参的类型自动推导出相应的函数类型,并进行函数调用。
🔄 内联函数和constexpr函数
✨ 内联函数
内联函数是指在函数调用时,将函数的代码直接插入到调用的地方,而不是通过函数调用的方式执行。内联函数的目的是减少函数调用的开销,提高代码的执行效率。
示例:
#include <iostream>
using namespace std;
// 内联函数定义
inline int add(int a, int b) {
return a + b;
}
int main() {
// 函数调用
int sum = add(5, 10);
cout << "两个数的和是:" << sum << endl;
return 0;
}
在上述示例中,我们使用inline
关键字将add
函数声明为内联函数。在函数调用时,编译器将函数的代码直接插入到调用的地方,避免了函数调用的开销。
✨ constexpr函数
constexpr
函数是指在编译时求值的函数。它可以在编译阶段计算出结果,并在运行时作为常量使用。
示例:
#include <iostream>
using namespace std;
// constexpr函数定义
constexpr int fibonacci(int n) {
return (n <= 1) ? n : fibonacci(n - 1) + fibonacci(n - 2);
}
int main() {
// 函数调用
constexpr int fib = fibonacci(5);
cout << "斐波那契数列的第五项是:" << fib << endl;
return 0;
}
在上述示例中,我们定义了一个名为fibonacci
的constexpr
函数,用于计算斐波那契数列的第n项。在main
函数中,我们使用fibonacci(5)
来初始化一个constexpr
变量fib
,并在输出中使用。
由于constexpr
函数在编译时求值,因此它的参数必须是编译时可确定的常量。在C++11之前,constexpr
函数的函数体必须是单一的return
语句;从C++14开始,constexpr
函数可以包含更复杂的逻辑。
📚结语
本篇学习笔记介绍了C++中的
函数概念及相关知识点。我们学习了函数的基础知识,包括函数的定义、调用和参数传递方式。我们还学习了函数重载、函数模板以及内联函数和constexpr
函数的使用。
通过学习函数的相关知识,我们可以更好地组织和管理程序的代码,提高代码的复用性和可维护性。在实际的程序开发中,函数是一种重要的代码组织方式,合理地使用函数可以使程序结构更加清晰,代码更加简洁高效。
希望本篇学习笔记对你理解和掌握C++中的函数概念有所帮助!如有疑问,请随时提问。
⭐️希望本篇文章对你有所帮助。
⭐️如果你有任何问题或疑惑,请随时向提问。文章来源:https://www.toymoban.com/news/detail-516797.html
⭐️感谢阅读!文章来源地址https://www.toymoban.com/news/detail-516797.html
到了这里,关于07-C++学习笔记-函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!