当我编译此代码时,当它应该为0时,我得到10的输出。

#include <iostream>

struct player
{
    int hp;
    int dmg;
};

void dealdamage(player x, player y)
{
    y.hp = y.hp - x.dmg;
}

int main()
{
player p1, p2;
p1.hp = 10, p1.dmg = 10;
p2.hp = 10, p2.dmg = 10;
dealdamage(p1, p2);
std::cout << p2.hp << std::endl;
return 0;
}

谁能解释为什么?

最佳答案

那是因为您要按值传递player结构。

当参数通过值传递时,会将副本复制到被调用的函数中。因此,对函数进行的任何更改都不会影响原始函数。

所以你的声明:

y.hp = y.hp - x.dmg;

仅影响xy的本地副本。该函数超出范围并在函数结束后被丢弃。

解决方案是像这样通过引用传递:
void dealdamage(player &x, player &y){

在这种情况下,对xy所做的更改将影响原始文档。

关于c++ - 结构给出错误的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7782094/

10-13 08:05