1

所以我目前正在学习一门名为数据结构和算法的课程,在第一堂课中,我遇到了一个我无法回答的问题。老师试图证明使用按值调用和调用的价值引用。他将一个数据结构传递给一个打印数据结构地址的函数。

代码基本上是这样的:

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()

4

2 回答 2

1

skrivAddresser1 中的结构是稍后构建的,而 skrivAddresser2 中的结构与之前创建的 main 中的结构相同。导致 main 较早调用。堆栈变量的规则是稍后创建较低的地址。因此,您之前在 main 中调用哪个并不重要,因为 skrivAddress2 不会创建新对象。并且原始对象总是在调用 skrivAddress 函数之前创建。

于 2021-01-21T13:25:22.013 回答
0

基本上,您需要研究按值调用和按引用调用的工作原理。

在按值调用中,函数将参数的实际值复制到函数的形式参数中。所以形参的地址显然会与实际值的地址不同(可能大于或小于哪个地址为空)。

在引用调用中,实际值是通过的,&所以它必须与原始值相同。

于 2021-01-21T13:25:14.883 回答