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

Luc*_*Aux 1 c pointers

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

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

void swap(int* a, int* b)
{
  int temp;
  temp = *a;
  *a = *b;
  *b = temp;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Joh*_*ger 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;
}
Run Code Online (Sandbox Code Playgroud)

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