使用指针模拟Pass-by-Value函数(C和C ++)中的Pass-by-Reference

时间:2017-09-29 23:36:06

标签: c pointers

所以我试图理解一段简单的代码,它使用Pass by value函数中的指针“模拟”传递引用。这个例子是作为一个C实践给出的,因为在C中没有通过引用,但我也很好奇它对C ++的影响。

所以在运行此代码后,值将被交换:

void swap(int* a, int* b)
{
  int temp;
  temp = *a;
  *a = *b;
  *b = temp;
}

我试图理解为什么将指针作为参数创建传递引用效果?这是否意味着通过指针执行的所有操作都具有传递引用效果?因此,一旦我们退出该功能,交换的内存位置将不会返回?这在C ++中也有效吗?

编码新手,所以我希望我能说清楚。

2 个答案:

答案 0 :(得分:5)

基本上,你的代码是将一个内存地址复制到函数中,而如果你省略了*运算符,该函数会将 内存地址复制到函数中。这是每条线基本上都在说的。

// Give me the memory address of a and b.
void swap(int* a, int* b)
{
  int temp;
  // Whatever value is at memory address 'a', copy it to temp.
  temp = *a; 
  // Whatever value is at memory address 'b', copy it to memory address 'a'.
  *a = *b;
  // Copy temp over the value at memory address 'b'.
  *b = temp;
}

是的,它在C ++中同样有效。

答案 1 :(得分:1)

您基本上可以将指针和引用视为同一件事。他们都提到地址。因此,如果将地址(作为指针或作为引用)传递给函数,并且地址的内容发生更改,则更改仍在函数末尾。