传值与传址有点搞不明白

这两个空是多少呢?传值和传址有点没搞懂,可以帮忙解答一下嘛?感谢感谢

img

15,-5

1.按引用传递(传址)时,会产生一份新的引用,假设叫做y。此时x和y指向了同一个对象。
新产生的y指向a原来存在的位置,那个位置存储的值在f2的计算过程中发生改变, a变为 25 return 25-10 = 15

2.按值传递时在调用的方法中,参数只是实际参数的一个拷贝。所以不管参数在方法里面如何修改都不会改变原来参数值。也就是说val的值一直保持不变。
则,第二空,a的值不会发生改变,return 5-10 = -5


#include <stdio.h>
int f2_r(int& x) {
    if (x>1) {
        x=x*x;
        return -10;
    } else {
        x=x+1;
        return 10;
    }

}
int f1_r(int x) {
    int a=5;
    x=f2_r(a);
    return a+x;
}
int f2_v(int x) {
    if (x>1) {
        x=x*x;
        return -10;
    } else {
        x=x+1;
        return 10;
    }

}
int f1_v(int x) {
    int a=5;
    x=f2_v(a);
    return a+x;
}
int main() {
    printf("%d\n",f1_r(1));//15
    printf("%d\n",f1_v(1));//-5
    return 0;
}

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。