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

passing arguments via reference and pointer C++

本文关键字:参数 C++ 指针 引用      更新时间:2023-10-16

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

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

答.cpp

调用函数f ( & myVariable)

在一个包含的文件中,我确实有这个:

B.h

void f ( MyVariable * myVariable);

B.cpp

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

其中 g 是类 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中吗?

是的。任何地方都没有副本,因为当您将变量从一个地方"传递"到另一个地方时,您要么使用指针,要么使用引用,因此您实际上在任何地方都使用相同的变量。

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

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

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

是的,

因为传递了变量地址,函数中 x 的任何更改都会更改调用函数的变量的值。两个指针都引用相同的内存位置。因此,一个值的变化会自动更改其他值。

每当通过引用或地址传递变量时,被调用函数中对该变量的任何更改都会反映在调用方函数中。为了回答您的问题,是的,对 X 的任何更改都将反映到 myVariable 中,即使 X 是私有变量,这也适用。