微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在不运行程序的情况下无法弄清楚获得此答案的逻辑过程 - C++

如何解决在不运行程序的情况下无法弄清楚获得此答案的逻辑过程 - C++

#include <iostream>
using namespace std;

int fun1(int p){
     ++p;
     return p++;
}
int fun2(int &p){
    ++p;
    return p++;
}

int main(void){
int a = 1,b,c;
b = fun1(a);
c = fun2(b);
cout<< a + b + c << endl;
return 0;
}

我在不运行程序的情况下得到的答案是 6 (a=1,b=2,c=3)。 但是,在您运行程序后,答案返回 8 (a=1,b=4,c=3)。

有人能解释一下你是如何得到每个答案的吗?

解决方法

这次通话之后

b = fun1(a);

a 将保持不变,因为它是按值传递给函数的,而 b 将等于 2。

在这次通话中

c = fun2(b);

变量b在函数内增加了两次,因为它是通过引用传递给函数的

int fun2(int &p){
    ++p;
    return p++;
}

所以调用函数后 b 将等于 4 但变量 c 将等于 3,因为后增量运算符的值

    return p++;

是其操作数在递增之前的值。

所以你有

1 + 4 + 3
,

首先你需要了解前增量和后增量以及地址

我会逐个解释你的代码功能

所以在 fun1 中,当您将 a (a=1) 作为 p 传递时起作用 ++p 是一种预增量方法 它首先将 p 增加 1 然后返回 p ,所以这里 p 现在是 2 在下一行中,当您返回 p++ 时,p++ 是一种后增量方法,即首先返回然后增加 1。 所以 fun1 返回 2

并且b的值变为2;

现在进入下一个功能

这里请注意,您传递了对 p 的引用,而不仅仅是 p 即如果您在此处更改 p,原始 p(对您传递的变量的引用)也会更改 所以你在这里++p 它的预增量,因此它将 p 的值增加 1, 请注意,您已将 b 作为 p 传递,b 的值也会从 2 变为 3, 现在在下一行,您返回 p++,3 作为 fun2 的值返回。 请注意 p++ 首先返回 3,但也会将 p 增加 1,因为您将 p 的引用作为 b 传递,b 增加 1,b 变为等于 4。

我想现在很清楚了,

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。