所以我现在正在选修一门名为“数据结构和算法”的课程,在第一节课上,我遇到了一个我无法完全理解的问题。教师正在尝试演示使用按值调用和按引用调用的价值。他正在将一个数据结构传递给一个打印数据结构地址的函数。
代码基本上是这样的:
struct Exempelstruct{
int m_intValue1;
int m_intValue2;
float m_array[1000];
};
void skrivAdresser1(Exempelstruct theStruct){
writeAdresses( theStruct );
}
//and
void skrivAdresser2(const Exempelstruct &theStruct){
writeAdresses( theStruct );
}问题是为什么skrivAdresser1()函数中的地址比skrivAdresser2()打印的地址低
发布于 2021-01-21 21:25:22
skrivAddresser1中的结构是稍后构造的,而skrivAddresser2中的结构与之前创建的main中的结构相同。原因之前调用了main。堆栈变量的规则是稍后创建较低的地址。因此,前面在main中调用哪一个并不重要,因为skrivAddress2不会创建新对象。并且原始对象总是在调用skrivAddress函数之前创建的。
发布于 2021-01-21 21:25:15
基本上,您需要研究按值调用和按引用调用的工作原理。
在按值调用中,函数将实参的实际值复制到函数的形参中。
在call by reference中,实际值通过&传递,因此它必须与原始值相同。
https://stackoverflow.com/questions/65827671
复制相似问题