按值调用VS按引用调用C++地址理解

问题描述

所以我目前正在学习一门名为数据结构和算法的课程,对于第一节课,我遇到了一个问题,我无法完全回答。老师试图展示使用调用的价值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 函数之前创建。

,

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

在按值调用中,函数复制参数的实际值 到函数的形参中。所以地址是 形式参数显然会与实际不同 值(无论地址是否为空,它都可能更大或更小)。

在引用调用中,实际值通过&传递,所以它有 与原始值相同。