C++——传参方式

109 阅读2分钟

函数的指针传参和引用传参

概念: 当调用一个函数,需要将一些数据传递给函数进行处理时,C++ 提供了三种常用的参数传递方式:值传递、指针传递和引用传递。

  • 值传递: 在调用函数时,将实参的值复制一份传递给形参。函数内部对形参的修改不会影响到实参的值。

  • 指针传递: 在调用函数时,将实参的内存地址传递给形参。形参是一个指针变量,指向实参的内存地址。函数内部可以通过解引用指针来修改实参的值。

  • 引用传递: 在调用函数时,将实参的别名传递给形参。形参是实参的一个别名,它们指向同一块内存空间。函数内部对形参的修改会直接影响到实参的值。

示例代码:

#include <iostream>

// 值传递
void swapByValue(int a, int b) {
  std::cout << "值传递函数内部:交换前 a = " << a << ", b = " << b << std::endl;
  int temp = a;
  a = b;
  b = temp;
  std::cout << "值传递函数内部:交换后 a = " << a << ", b = " << b << std::endl;
}

// 指针传递
void swapByPointer(int* a, int* b) {
  std::cout << "指针传递函数内部:交换前 *a = " << *a << ", *b = " << *b << std::endl;
  int temp = *a;
  *a = *b;
  *b = temp;
  std::cout << "指针传递函数内部:交换后 *a = " << *a << ", *b = " << *b << std::endl;
}

// 引用传递
void swapByReference(int& a, int& b) {
  std::cout << "引用传递函数内部:交换前 a = " << a << ", b = " << b << std::endl;
  int temp = a;
  a = b;
  b = temp;
  std::cout << "引用传递函数内部:交换后 a = " << a << ", b = " << b << std::endl;
}

int main() {
  int x = 10, y = 20;

  std::cout << "交换前:x = " << x << ", y = " << y << std::endl;

  // 值传递
  swapByValue(x, y);
  std::cout << "值传递后:x = " << x << ", y = " << y << std::endl;

  // 指针传递
  swapByPointer(&x, &y);
  std::cout << "指针传递后:x = " << x << ", y = " << y << std::endl;

  // 引用传递
  swapByReference(x, y);
  std::cout << "引用传递后:x = " << x << ", y = " << y << std::endl;

  return 0;
}

讲解要点:

  • 三种传参方式的区别:
传参方式传递内容是否会修改实参效率 (一般情况下)使用场景
值传递实参的值低 (需要复制)不需要修改实参,传递简单数据类型
指针传递实参的地址需要修改实参,传递大型数据结构,动态内存管理
引用传递实参的别名高 (无需复制)需要修改实参,语法更简洁