21xrx.com
2025-07-14 08:12:47 Monday
文章检索 我的文章 写文章
C++函数参数传递:了解传值、传引用和传指针的区别
2023-06-25 03:21:55 深夜i     15     0
C++ 函数参数传递 传值 传引用 传指针

在程序开发中,函数是常用的代码块,它们可以重复使用,在不同的程序中使用。在函数中,参数传递是必要的,因为参数决定着函数的行为。有三种不同的参数传递方式:传值、传引用和传指针。

传值是指在调用函数时,将参数的值复制到函数的形参中。这样在函数内部对形参的修改不会影响到实参的值,因为实参和形参是两个完全不同的变量。这种方式比较简单,适用于传递简单的数据类型(如int、float等)。

例如:

void swap(int a, int b)
  int t = a;
  a = b;
  b = t;
int main()
{
  int x = 1, y = 2;
  swap(x, y);
  cout << x << " " << y << endl;
  return 0;
}

在这个例子中,虽然在交换函数swap中,a和b的值交换了,但由于传递的是值,所以在函数外部x和y的值并没有发生变化,仍然是1和2。

与传值不同,传引用是指在调用函数时,将参数的地址传递到函数的形参中。这样在函数内部对形参的修改会直接影响到实参的值,因为实参和形参是同一个变量。这种方式适用于传递大型的数据结构类型(如数组、类等)。

例如:

void swap(int &a, int &b)
  int t = a;
  a = b;
  b = t;
int main()
{
  int x = 1, y = 2;
  swap(x, y);
  cout << x << " " << y << endl;
  return 0;
}

在这个例子中,交换函数swap中的a和b是变量x和y的别名,所以在函数内部交换a和b的值同时也就交换了x和y的值,最终输出2 1。

除了传引用,还有一种参数传递方式是传指针。传指针也是将参数的地址传递到函数的形参中,但是和传引用的区别是需要使用指针运算符*来访问变量的值。这种方式也适用于传递大型的数据结构类型。

例如:

void swap(int *a, int *b)
{
  int t = *a;
  *a = *b;
  *b = t;
}
int main()
{
  int x = 1, y = 2;
  swap(&x, &y);
  cout << x << " " << y << endl;
  return 0;
}

在这个例子中,交换函数swap中的a和b是变量x和y的地址,因此需要使用指针运算符*来访问它们所指向的变量。最终输出2 1,和传引用的结果一致。

总之,了解C++函数参数传递的三种方式可以更好地编写程序。传值是比较简单的传递方式,但传引用和传指针有更广泛的应用,尤其是在处理大型的数据结构时。在实际应用中,建议根据具体情况来选择合适的参数传递方式。

  
  

评论区