Poczytaj sobie o czymś takim jak przesyłanie argumentów przez referencję (przesyłanie oryginału). Jeżeli w funkcji przesyłasz kopię danych z gracza to modyfikowanie wartości kopii (które znikną po zakończeniu się funkcji) nie zmieni oryginalnych wartości (np. HP gracza).
Prosty przykład:
void fBezReferencji(int a, int b) {a-=5; b-=5;} ... int a=10, b=20; fBezReferencji(a,b); //Na wyjściu dostaniesz a=10 i b=20 ---------------- void fReferencja(int &a, int &b) {a-=5; b-=5;} ... int a=10, b=20; fReferencja(a,b); //Na wyjściu dostaniesz a=5 i b=15