Reg*_*ser 8 c c++ pass-by-reference
我对C和C++中"通过引用传递"的含义感到困惑.
在C中,没有参考.所以我猜通过引用传递意味着传递一个指针.但那么为什么不通过指针调用它呢?
在C++中,我们有指针和引用(以及接近的迭代器之类的东西).那么通过引用传递的是什么意思呢?
Dev*_*lar 17
在口语用法中,"按引用传递"意味着,如果被调用者修改其参数,则它会影响调用者,因为被调用者看到的参数指的是调用者看到的值.
该短语的使用独立于实际的编程语言,以及它如何调用事物(指针,引用,等等).
在C++中,可以使用引用或指针来完成call-by-reference.在C中,只能通过传递指针来实现call-by-reference.
"按价值呼叫":
void foo( int x )
{
// x is a *copy* of whatever argument foo() was called with
x = 42;
}
int main()
{
int a = 0;
foo( a );
// at this point, a == 0
}
Run Code Online (Sandbox Code Playgroud)
"按参考呼叫",C风格:
void foo( int * x )
{
// x is still a *copy* of foo()'s argument, but that copy *refers* to
// the value as seen by the caller
*x = 42;
}
int main()
{
int a = 0;
foo( &a );
// at this point, a == 42
}
Run Code Online (Sandbox Code Playgroud)
因此,严格地说,C中没有传递参考.您可以传递变量by-value,也可以将指针传递给该变量by-value.
在C中,没有参考
没有参考变量.但是你可以使用指针来引用对象.因此,从抽象的角度来看,指针是"引用".
但那么为什么不通过指针调用它呢?
你可以通过指针调用它.参考是一个比指针更通用的术语.当您想要讨论抽象并希望忽略实现细节时,通常最好使用更通用的术语.您可以将其称为通过引用传递,原因与调用变量"integer"而不是"int32_t"的原因相同.
在C++中,我们有指针和引用(以及接近的迭代器之类的东西).那么通过引用传递的是什么意思呢?
取决于背景.通常它意味着函数参数是一个引用变量,但它也可以引用指针,迭代器,引用包装器......引用一个对象的任何东西.
引用是一个超越c和c ++的抽象概念; 甚至超越编程.在c ++中,该术语与引用变量不明确,并且上下文和约定(不是通用的)决定了含义.