21xrx.com
2024-11-10 00:18:02 Sunday
登录
文章检索 我的文章 写文章
C++中值传递和地址传递的区别
2023-06-23 16:24:48 深夜i     --     --
C++ 值传递 地址传递 区别 函数参数

在C++中,函数参数传递方式有两种:值传递和地址传递。这两种方式的主要区别在于传递参数时所使用的方法不同。

值传递是将实参的值复制一份到形参中。在函数内部,对形参的修改不会影响到实参的值。这是因为值传递采用的是参数副本,函数对参数进行的修改只是针对这个副本的修改,所以不会对原参数产生影响。例如:


void swap(int a, int b) // 值传递方式

  int temp = a;

  a = b;

  b = temp;

int main() {

  int x = 1, y = 2;

  swap(x, y);

  cout << "x=" << x << ", y=" << y << endl;

  return 0;

}

在上述代码中,swap函数对形参a和b进行了交换,但在主函数中,x和y的值并没有发生变化,因为swap函数采用的是值传递方式。

相比之下,地址传递是将实参的内存地址作为参数传递给函数,函数内部通过指针操作来修改实参的值。在函数内部,对形参的修改会影响到实参的值。例如:


void swap(int* a, int* b) { // 地址传递方式

  int temp = *a;

  *a = *b;

  *b = temp;

}

int main() {

  int x = 1, y = 2;

  swap(&x, &y);

  cout << "x=" << x << ", y=" << y << endl;

  return 0;

}

在上述代码中,swap函数参数采用的是指针类型,通过取地址符&将x和y的地址传递给swap函数。在函数内部,通过指针操作可以对x和y的值进行交换。执行完swap函数后,x和y的值也被成功交换。

需要注意的是,在使用地址传递时要注意指针的合法性。如果指针参数指向的内存区域未被初始化,或者已经被释放,对其进行访问将导致未定义的行为。还需要注意的是,指针变量可以指向一个数组的首地址,通过指针来遍历和修改数组中的元素。

综上所述,值传递和地址传递是函数参数传递时常用的两种方式。值传递将实参的值复制一份到形参中,对形参的修改不会影响到实参;地址传递是将实参的地址作为参数传递给函数,函数内部通过指针操作来修改实参的值,对形参的修改会影响到实参。在实际编程中,我们需要根据实际情况选择不同的参数传递方式。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复