所以我试图理解一段简单的代码,它使用Pass by value函数中的指针“模拟”传递引用。这个例子是作为一个C实践给出的,因为在C中没有通过引用,但我也很好奇它对C ++的影响。
所以在运行此代码后,值将被交换:
void swap(int* a, int* b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
我试图理解为什么将指针作为参数创建传递引用效果?这是否意味着通过指针执行的所有操作都具有传递引用效果?因此,一旦我们退出该功能,交换的内存位置将不会返回?这在C ++中也有效吗?
编码新手,所以我希望我能说清楚。
答案 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)
您基本上可以将指针和引用视为同一件事。他们都提到地址。因此,如果将地址(作为指针或作为引用)传递给函数,并且地址的内容发生更改,则更改仍在函数末尾。