当我编译此代码时,当它应该为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;
仅影响
x
和y
的本地副本。该函数超出范围并在函数结束后被丢弃。解决方案是像这样通过引用传递:
void dealdamage(player &x, player &y){
在这种情况下,对
x
和y
所做的更改将影响原始文档。关于c++ - 结构给出错误的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7782094/