通过引用和指针传递参数 C++

passing arguments via reference and pointer C++

我正在查看一个代码片段并且我有这个序列。

class MyVariable {
....
    CustomType z;
....
}

A.cpp

调用一个函数f ( & myVariable)

在包含的文件中我有这个:

B.h

void f ( MyVariable * myVariable);

B.cpp

f( MyVariable * myVariable){
   CustomType & x = myVariable ->g();
}

其中 g 是 class MyVariable 的一个方法,实现是:

CustomType & g() {
   ...
    return z; //where you can find z in the class
}

虽然对我来说它看起来很复杂,所以我的问题是:

对 x 的任何更改是否反映到用作 A.cpp 函数调用参数的 myVariable?

换句话说,如果在 B.cpp 中,我会这样做:

// change x with some value

该更改是否也会反映在 myVariable 中?

x是对myVariablez成员的非常量引用,所以是的,如果你改变xmyVariable->z也会改变还有。

您可以将引用视为别名,x 只是 myVariable->z 的别名。

是的。任何地方都没有副本,因为当您将变量从一个地方“传递”到另一个地方时,您使用的是指针或引用,所以您实际上到处都在使用相同的变量。

g() 中,您 return 引用 z,然后在 f() 中您保留对 z。此外,当你调用 f() 时,你甚至没有复制 myVariable,而是它的地址(以指针的形式),所以你实际上修改了 z 的成员myVariable 您在 A.cpp.

中的变量

是的,因为传递了变量地址,函数内 x 的任何变化都会改变函数所在变量的值 called.Both 指针指向同一内存 location.So 变化一个的值会自动更改另一个的值。

无论何时通过引用或地址传递变量,调用函数中对该变量的任何更改都会反映在调用函数中。 要回答您的问题,是的,对 X 的任何更改都将反映到 myVariable 并且即使 X 是私有变量也适用。