函数详解
一、函数基础知识点
1. 函数的概念
函数是一段完成特定功能的代码块,具有以下特点:
-
代码复用:避免重复编写相同代码
-
模块化:将复杂问题分解为小任务
-
易于维护:修改只需调整函数内部
2. 如何自定义函数
C++中函数定义的基本语法:
返回类型 函数名(参数列表) { // 函数体 return 返回值; // 与返回类型一致 }
3. 函数的参数
-
形式参数:函数定义时声明的参数
-
实际参数:调用函数时传入的具体值
-
参数传递方式:
-
值传递(默认)
-
引用传递(加
&) -
指针传递
-
4. 传参的技巧
- 掌握按值传参
- 掌握按值数组传参
- 掌握引用传参(即函数内参数修改会影响到原数据)
- 掌握全局变量在函数的应用
二、函数示例
1. 定义max/min函数
#include <iostream> using namespace std; // 返回两个整数中的较大值 int myMax(int a, int b) { return a > b ? a : b; } // 返回两个整数中的较小值 int myMin(int a, int b) { return a < b ? a : b; } int main() { cout << "最大值:" << myMax(5, 3) << endl; cout << "最小值:" << myMin(5, 3) << endl; return 0; }
2. 定义数组求和函数
#include <iostream> using namespace std; // 返回整型数组的和 int arraySum(int arr[], int size) { int sum = 0; for(int i = 0; i < size; i++) { sum += arr[i]; } return sum; } int main() { int nums[] = {1, 2, 3, 4, 5}; int length = sizeof(nums) / sizeof(nums[0]); cout << "数组和:" << arraySum(nums, length); return 0; }
3. 回文串判断函数
#include <iostream> #include <string> using namespace std; // 判断字符串是否是回文 bool isPalindrome(string s) { int left = 0; int right = s.length() - 1; while(left < right) { if(s[left] != s[right]) { return false; } left++; right--; } return true; } int main() { string test = "level"; cout << test << "是回文吗?" << (isPalindrome(test) ? "是" : "否"); return 0; }
4. 素数判断函数
#include <iostream> #include <cmath> using namespace std; // 判断一个数是否是素数 bool isPrime(int n) { if(n <= 1) return false; if(n == 2) return true; if(n % 2 == 0) return false; for(int i = 3; i <= sqrt(n); i += 2) { if(n % i == 0) { return false; } } return true; } int main() { int num = 17; cout << num << (isPrime(num) ? "是" : "不是") << "素数"; return 0; }
参数传递机制深度解析
1. 值传递(Pass by Value)
本质:创建参数的副本传入函数
void modify(int x) {
x = 10; // 只修改副本
}
int main() {
int a = 5;
modify(a);
cout << a; // 仍输出5
}
特点:
-
不影响原始数据
-
适用于基本数据类型和小型结构
-
内存开销:每次调用产生副本
2. 引用传递(Pass by Reference)
本质:传递变量的别名(内存地址)
void modify(int &x) { // 注意&符号
x = 10; // 修改原始数据
}
int main() {
int a = 5;
modify(a);
cout << a; // 输出10
}
关键点:
-
直接操作原始变量
-
语法:参数类型后加
& -
必须传递有效变量(不能是字面量)

浙公网安备 33010602011771号