通过引用和指针传递参数 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
是对myVariable
的z
成员的非常量引用,所以是的,如果你改变x
,myVariable->z
也会改变还有。
您可以将引用视为别名,x
只是 myVariable->z
的别名。
是的。任何地方都没有副本,因为当您将变量从一个地方“传递”到另一个地方时,您使用的是指针或引用,所以您实际上到处都在使用相同的变量。
在 g()
中,您 return 引用 到 z
,然后在 f()
中您保留对 z
。此外,当你调用 f()
时,你甚至没有复制 myVariable
,而是它的地址(以指针的形式),所以你实际上修改了 z
的成员myVariable
您在 A.cpp
.
中的变量
是的,因为传递了变量地址,函数内 x 的任何变化都会改变函数所在变量的值 called.Both 指针指向同一内存 location.So 变化一个的值会自动更改另一个的值。
无论何时通过引用或地址传递变量,调用函数中对该变量的任何更改都会反映在调用函数中。
要回答您的问题,是的,对 X 的任何更改都将反映到 myVariable 并且即使 X 是私有变量也适用。
我正在查看一个代码片段并且我有这个序列。
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
是对myVariable
的z
成员的非常量引用,所以是的,如果你改变x
,myVariable->z
也会改变还有。
您可以将引用视为别名,x
只是 myVariable->z
的别名。
是的。任何地方都没有副本,因为当您将变量从一个地方“传递”到另一个地方时,您使用的是指针或引用,所以您实际上到处都在使用相同的变量。
在 g()
中,您 return 引用 到 z
,然后在 f()
中您保留对 z
。此外,当你调用 f()
时,你甚至没有复制 myVariable
,而是它的地址(以指针的形式),所以你实际上修改了 z
的成员myVariable
您在 A.cpp
.
是的,因为传递了变量地址,函数内 x 的任何变化都会改变函数所在变量的值 called.Both 指针指向同一内存 location.So 变化一个的值会自动更改另一个的值。
无论何时通过引用或地址传递变量,调用函数中对该变量的任何更改都会反映在调用函数中。 要回答您的问题,是的,对 X 的任何更改都将反映到 myVariable 并且即使 X 是私有变量也适用。