亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++ 引用传参与指针传参:交换变量值的实战对比

C++ 引用传参与指针传参:交换变量值的实战对比

本指南通过交换两数值的经典案例,对比 C++ 引用与指针两种传参方式的语法差异、底层机制及适用场景。

C++ 函数默认按值传参:函数接收原数据的副本。这保护了原变量,但对大型对象效率低,且无法修改调用者数据。

引用传参解决了这两个问题:函数接收原变量的引用(别名),可直接操作原数据。C++ 提供两种等价方式:引用语法与原始指针。掌握两者能让你更灵活地处理内存。

// 按值传参
void func1(int numVal) { /* ... */ }
// 按引用传参(C++ 引用语法)
void func2(int &numRef) { /* ... */ }

int main() {
    int num = 5;
    func1(num);   // 传值:传递副本
    func2(num);   // 传引用:传递地址,可修改原变量
    return 0;
}

void func2(int &numRef) 中的 & 标记参数为引用。调用时传递的是 num 的地址,函数内部可直接修改 num。

C++ 引用传参与指针传参:交换变量值的实战对比

示例 1:使用 C++ 引用交换两数

#include <iostream>
using namespace std;

// 使用引用参数的交换函数
void swap(int &n1, int &n2) {
    int temp = n1;
    n1 = n2;
    n2 = temp;
}

int main() {
    int a = 1, b = 2;
    cout << "Before swapping\n";
    cout << "a = " << a << "\n";
    cout << "b = " << b << "\n";
    swap(a, b);
    cout << "\nAfter swapping\n";
    cout << "a = " << a << "\n";
    cout << "b = " << b << "\n";
    return 0;
}

输出

Before swapping
a = 1
b = 2
After swapping
a = 2
b = 1

swap 接收两个引用参数。n1、n2 是 a、b 的别名,函数内修改直接影响原变量。


示例 2:使用指针交换两数

#include <iostream>
using namespace std;

// 函数原型使用指针
void swap(int*, int*);

int main() {
    int a = 1, b = 2;
    cout << "Before swapping\n";
    cout << "a = " << a << "\n";
    cout << "b = " << b << "\n";
    // 传递地址
    swap(&a, &b);
    cout << "\nAfter swapping\n";
    cout << "a = " << a << "\n";
    cout << "b = " << b << "\n";
    return 0;
}

// 使用指针的交换函数
void swap(int* n1, int* n2) {
    int temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

输出

Before swapping
a = 1
b = 2
After swapping
a = 2
b = 1

此处 swap 接收原始指针,通过解引用 * 访问并修改地址处的值。效果与引用版本相同,但指针语法显式暴露了地址传递。

选择建议: 引用语法更安全、简洁,适合大多数场景;指针提供显式内存控制,动态分配、可选参数(可传 nullptr)等场景必须使用指针。

C语言

  1. 2021年13种常见恶意软件类型:威胁、案例与防范指南
  2. 五大数据中心模型详解:设计架构、适用场景与典型案例
  3. 2021年八大关键技术趋势深度解析:从材料科学到信息技术
  4. 掌握 C# using 指令:命名空间导入、别名与静态导入全解析
  5. 掌握 C++ 运算符:六大类型全解析与实战示例
  6. C++ 注释最佳实践:编写可读、可维护代码的注释艺术
  7. C++ 类模板实战指南:编写灵活的类型无关代码
  8. 精通C语言指针:专家级实战教程
  9. C++ 指针精通:核心概念、代码示例与实战应用
  10. C 语言指针实战:从入门到高级编程
  11. C++编程语言:核心特性全景解析
  12. C++常量与字面量完全手册:类型、语法与最佳实践