Структура дает неправильный вывод - PullRequest
1 голос
/ 16 октября 2011

Когда я компилирую этот код, я получаю вывод 10, когда он должен быть 0.

#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 Ответ

3 голосов
/ 16 октября 2011

Это потому, что вы передаете структуры player по значению.

Когда параметр передается по значению, копия вызывается в вызываемой функции.Поэтому любые изменения, внесенные в функцию, не влияют на оригинал.

Итак, ваше утверждение:

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

влияет только на локальную копию x и y.Который выпадает из области видимости и выбрасывается после завершения функции.

Решение состоит в том, чтобы передать ссылку следующим образом:

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

В этом случае изменения вносятся в xи y повлияет на оригиналы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...