结构给出不正确的输出

时间:2011-10-16 03:04:34

标签: c++ struct

当我编译这段代码时,当它应为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;
}

任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:3)

那是因为你按值传递了player个结构。

当参数按值传递时,将复制到被调用函数中。因此,您在函数中所做的任何更改都不会影响原始文件。

所以你的陈述:

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

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

解决方案是通过引用传递:

void dealdamage(player &x, player &y){

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