Possible Duplicate:
What's the difference between passing by reference vs. passing by value?
我读到,在 C 中参数是按值传递的,但是按值传递参数(如 C 中)或按引用传递参数(如 C++ - C#)之间有什么区别? 指针和引用有什么区别?
void with_ptr(int *i)
{ *i = 0; }
void with_ref(int &i)
{ i = 0; }
在这些情况下都修改两个值吗?如果是,为什么 C++ 允许通过引用传递参数?我认为函数内部并不清楚 i 值可以修改。
最佳答案
what's is the difference between passing arguments by value or by reference
如果按值传递,则对变量的更改将是函数本地的,因为调用函数时会复制该值。对引用参数的修改将传播到原始值。
What's the difference between a pointer and a reference?
正如您在代码中所看到的,差异主要在于语法。此外,指针可以被重新分配以指向其他内容(除非它被声明为const),而引用则不能;相反,分配给引用将分配给引用的值。
I think it is not clear inside the function that the i value could be modified.
相反,这是绝对清楚的:函数签名告诉你这一点。
实际上有一种情况是函数外部并不清楚。这就是为什么 C# 的原始版本要求您使用 ref
显式注释任何按引用调用(即 f(ref x)
而不是普通的 f(x )
)。这类似于使用 f(&x)
在 C++ 中调用函数来明确传递了一个指针。
但在 C# 的最新版本中,使用 ref
进行调用是可选的,因为它毕竟没有带来足够的优势。
关于c++ - 按值传递参数和按引用传递参数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10598043/