在C和C++中通过引用传递的含义?

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.


eer*_*ika 5

在C中,没有参考

没有参考变量.但是你可以使用指针来引用对象.因此,从抽象的角度来看,指针是"引用".

但那么为什么不通过指针调用它呢?

可以通过指针调用它.参考是一个比指针更通用的术语.当您想要讨论抽象并希望忽略实现细节时,通常最好使用更通用的术语.您可以将其称为通过引用传递,原因与调用变量"integer"而不是"int32_t"的原因相同.

在C++中,我们有指针和引用(以及接近的迭代器之类的东西).那么通过引用传递的是什么意思呢?

取决于背景.通常它意味着函数参数是一个引用变量,但它也可以引用指针,迭代器,引用包装器......引用一个对象的任何东西.


引用是一个超越c和c ++的抽象概念; 甚至超越编程.在c ++中,该术语与引用变量不明确,并且上下文和约定(不是通用的)决定了含义.