在 C++ 中,函数是一段完成特定任务的独立代码块,可提高代码的复用性和可维护性。以下从函数的定义、声明、调用、参数传递、返回值、重载、递归等多个方面进行详细总结。
1. 函数定义
函数定义由函数头和函数体组成,函数头包含返回类型、函数名和参数列表,函数体包含具体的代码实现。
// 函数定义示例
int add(int a, int b) {
return a + b;
}
上述代码定义了一个名为 add 的函数,它接受两个 int 类型的参数 a 和 b,并返回它们的和。
2. 函数声明
函数声明告知编译器函数的名称、返回类型和参数列表,使得函数在定义之前可以被调用。
// 函数声明
int add(int a, int b);
// 主函数
int main() {
int result = add(3, 4);
return 0;
}
// 函数定义
int add(int a, int b) {
return a + b;
}
在上述代码中,先对 add 函数进行了声明,然后在 main 函数中调用该函数,最后进行函数定义。
3. 函数调用
函数调用是通过函数名和实参列表来执行函数的过程。
#include <iostream>
int add(int a, int b) {
return a + b;
}
int main() {
int num1 = 3, num2 = 4;
int result = add(num1, num2); // 函数调用
std::cout << "The result is: " << result << std::endl;
return 0;
}
在 main 函数中,调用 add 函数并将 num1 和 num2 作为实参传递给它,将返回值赋给 result 变量。
4. 参数传递
C++ 支持三种参数传递方式:值传递、引用传递和指针传递。
值传递
值传递是将实参的值复制给形参,函数内部对形参的修改不会影响实参。
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 1, y = 2;
swap(x, y);
// x 和 y 的值不会改变
return 0;
}
引用传递
引用传递是将实参的引用传递给形参,函数内部对形参的修改会影响实参。
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 1, y = 2;
swap(x, y);
// x 和 y 的值会交换
return 0;
}
指针传递
指针传递是将实参的地址传递给形参,函数内部可以通过指针修改实参的值。
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 1, y = 2;
swap(&x, &y);
// x 和 y 的值会交换
return 0;
}
5. 返回值
函数可以有返回值,也可以没有返回值(返回类型为 void)。返回值通过 return 语句返回。
// 有返回值的函数
int getValue() {
return 10;
}
// 无返回值的函数
void printMessage() {
std::cout << "Hello, World!" << std::endl;
}
6. 函数重载
函数重载是指在同一作用域内定义多个同名函数,但它们的参数列表不同(参数个数、类型或顺序不同)。
#include <iostream>
// 重载函数 1
int add(int a, int b) {
return a + b;
}
// 重载函数 2
double add(double a, double b) {
return a + b;
}
int main() {
int result1 = add(3, 4);
double result2 = add(3.5, 4.5);
return 0;
}
在上述代码中,add 函数被重载,一个接受两个 int 类型的参数,另一个接受两个 double 类型的参数。
7. 递归函数
递归函数是指在函数内部调用自身的函数。递归函数通常包含递归终止条件和递归调用。
// 计算阶乘的递归函数
int factorial(int n) {
if (n == 0 || n == 1) {
return 1; // 递归终止条件
} else {
return n * factorial(n - 1); // 递归调用
}
}
8. 默认参数
函数的参数可以有默认值,在调用函数时,如果没有提供相应的实参,则使用默认值。
#include <iostream>
// 带有默认参数的函数
void printMessage(const std::string& message = "Hello, World!") {
std::cout << message << std::endl;
}
int main() {
printMessage(); // 使用默认参数
printMessage("Goodbye!"); // 提供实参
return 0;
}
9. 内联函数
内联函数是一种特殊的函数,编译器会将函数体直接嵌入到调用处,减少函数调用的开销。
// 内联函数
inline int add(int a, int b) {
return a + b;
}
常用内置函数
1. 数学函数
数学函数主要包含在 头文件中,用于执行各种数学运算。
- sqrt():计算平方根。
#include <iostream>
#include <cmath>
int main() {
double num = 16.0;
double result = std::sqrt(num);
std::cout << "Square root of " << num << " is " << result << std::endl;
return 0;
}
- pow():计算幂次方。
#include <iostream>
#include <cmath>
int main() {
double base = 2.0;
double exponent = 3.0;
double result = std::pow(base, exponent);
std::cout << base << " raised to the power of " << exponent << " is " << result << std::endl;
return 0;
}
- sin()、cos()、tan():计算三角函数值。
#include <iostream>
#include <cmath>
int main() {
double angle = 45.0;
double radians = angle * M_PI / 180.0; // 角度转弧度
double sine = std::sin(radians);
double cosine = std::cos(radians);
double tangent = std::tan(radians);
std::cout << "sin(" << angle << ") = " << sine << std::endl;
std::cout << "cos(" << angle << ") = " << cosine << std::endl;
std::cout << "tan(" << angle << ") = " << tangent << std::endl;
return 0;
}
2. 字符串处理函数
字符串处理函数主要包含在 或 头文件中。
使用 处理 C 风格字符串
- strlen():计算字符串的长度。
#include <iostream>
#include <cstring>
int main() {
const char str[] = "Hello";
size_t length = std::strlen(str);
std::cout << "Length of the string is " << length << std::endl;
return 0;
}
- strcpy():复制字符串。
#include <iostream>
#include <cstring>
int main() {
char source[] = "Hello";
char destination[10];
std::strcpy(destination, source);
std::cout << "Copied string: " << destination << std::endl;
return 0;
}
使用 处理 C++ 风格字符串
- length() 或 size():计算字符串的长度。
#include <iostream>
#include <string>
int main() {
std::string str = "Hello";
size_t length = str.length();
std::cout << "Length of the string is " << length << std::endl;
return 0;
}
- substr():提取子字符串。
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, World!";
std::string sub = str.substr(7, 5); // 从索引 7 开始,提取 5 个字符
std::cout << "Substring: " << sub << std::endl;
return 0;
}
3. 输入输出函数
输入输出函数主要包含在 头文件中。
- std::cin:用于从标准输入读取数据。
#include <iostream>
int main() {
int num;
std::cout << "Enter a number: ";
std::cin >> num;
std::cout << "You entered: " << num << std::endl;
return 0;
}
- std::cout:用于向标准输出输出数据。
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
4. 类型转换函数
类型转换函数用于在不同数据类型之间进行转换。
- static_cast:用于基本数据类型的转换和具有继承关系的指针或引用之间的转换。
#include <iostream>
int main() {
double num = 3.14;
int integer = static_cast<int>(num);
std::cout << "Converted integer: " << integer << std::endl;
return 0;
}
- std::stoi、std::stof 等:用于字符串到基本数据类型的转换。
#include <iostream>
#include <string>
int main() {
std::string str = "123";
int num = std::stoi(str);
std::cout << "Converted integer: " << num << std::endl;
return 0;
}
5. 内存管理函数
内存管理函数主要包含在 头文件中。
malloc():分配内存。
#include <iostream>
#include <cstdlib>
int main() {
int* ptr = static_cast<int*>(std::malloc(5 * sizeof(int)));
if (ptr != nullptr) {
for (int i = 0; i < 5; ++i) {
ptr[i] = i;
}
for (int i = 0; i < 5; ++i) {
std::cout << ptr[i] << " ";
}
std::cout << std::endl;
std::free(ptr);
}
return 0;
}
6. 时间函数
时间函数主要包含在 头文件中。
- time():获取当前时间。
#include
#include
int main() {
std::time_t currentTime = std::time(nullptr);
std::cout << "Current time: " << std::ctime(¤tTime);
return 0;
}
1万+

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



