【问题标题】:i don't know why the result is like this? i expected 15 50 5 [duplicate]我不知道为什么结果是这样的?我预计 15 50 5 [重复]
【发布时间】:2016-02-04 09:28:15
【问题描述】:

我不知道为什么结果是这样的?我预计是 15 50 5。 谁能帮我理解结果

#include<iostream>
#include<conio.h>

using namespace std;

int f(int &a, int &b)
{
    int m = a;
    int n = b;
    a = a*b;
    b = a / b;
    return n + m;
}

int main()
{
    int x = 10;
    int y = 5;
    cout << f(x, y) << " " << x << " " << y;
    _getch();
    return 0;
}
//why is the result like this?

【问题讨论】:

  • 结果怎么样?
  • 我不知道你得到了什么,但预期是:15 50 10
  • vs 2015 得到的结果是 15 10 5。
  • @Kasra 点击链接。
  • 问题是f(x, y) 更新xy。我们不知道输出是显示旧值还是新值。那是未指定的。

标签: c++


【解决方案1】:
  • 只需像这样调用你的函数:

    int a = f(x, y);
    cout << a << " " << x << " " << y;
    

【讨论】:

  • 令人惊叹。它的作品。非常感谢你。但原因是什么???
  • 我不能再发布答案了,所以没有完整的代码很抱歉,但是如果你检查反汇编,首先 Y 被输入到流中,然后 X 被输入然后它调用 f,并输入结果. s30.postimg.org/8ke0jt08h/disass.jpg这是在VS2015上
  • 因为未指定评估顺序。可能是从左到右或从右到左。
  • 我认为你是对的。你真是太好了
猜你喜欢
  • 1970-01-01
  • 2016-02-25
  • 2019-06-22
  • 2019-08-09
  • 2019-08-21
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 2021-08-03
相关资源
最近更新 更多