函数详解

一、函数基础知识点

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
}

关键点:

  • 直接操作原始变量

  • 语法:参数类型后加&

  • 必须传递有效变量(不能是字面量)

 

posted @ 2025-04-24 22:15  CRt0729  阅读(22)  评论(0)    收藏  举报