问题描述
所以我目前正在学习一门名为数据结构和算法的课程,对于第一节课,我遇到了一个问题,我无法完全回答。老师试图展示使用调用的价值value 和 call by reference。他正在将一个数据结构传递给一个打印数据结构地址的函数。
代码基本上是这样的:
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()
打印的地址?
解决方法
skrivAddresser1 中的结构体在后面构造,而 skrivAddresser2 中的结构体与之前创建的 main 中的结构体相同。原因主要提前调用。堆栈变量的规则是稍后创建地址较低。因此,您在 main 中较早调用哪一个并不重要,因为 skrivAddress2 不会创建新对象。并且原始对象总是在调用 skrivAddress 函数之前创建。
,基本上,您需要研究按值调用和按引用调用的工作原理。
在按值调用中,函数复制参数的实际值 到函数的形参中。所以地址是 形式参数显然会与实际不同 值(无论地址是否为空,它都可能更大或更小)。
在引用调用中,实际值通过&
传递,所以它有
与原始值相同。