当我编译这段代码时,当它应为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;
}
任何人都可以解释原因吗?
答案 0 :(得分:3)
那是因为你按值传递了player
个结构。
当参数按值传递时,将复制到被调用函数中。因此,您在函数中所做的任何更改都不会影响原始文件。
所以你的陈述:
y.hp = y.hp - x.dmg;
仅影响x
和y
的本地副本。这超出了范围,并在函数结束后被丢弃。
解决方案是通过引用传递:
void dealdamage(player &x, player &y){
在这种情况下,对x
和y
所做的更改将影响原件。