Как изменить значение структуры внутри функции? [С] - PullRequest
0 голосов
/ 29 апреля 2018

Давайте рассмотрим этот код в качестве примера

#include <stdio.h>
typedef struct 
{
    int hp;
}Player;

void lessHp(Player a)
{
    printf("a.hp = %d\n", a.hp);
    (*Player) -> hp -= 1;
    printf("a.hp now = %d\n", a.hp);
}

int main()
{
    Player a;
    a.hp = 1;
    lessHp(a);
    printf("a.hp = %d\n", a.hp);
    return 0;
}

Теперь эта программа печатает:

a.hp = 1
a.hp now = 0
a.hp = 1

Но как я могу сделать так, чтобы функция lessHp действительно могла вычесть 1 из этого значения? При попытке сделать это по ссылке он говорит мне использовать ("->"), но я действительно, действительно не знаю, что это такое (я использовал только простые указатели, единственное, с чем я работал с указателями) такое динамическое распределение памяти).

1 Ответ

0 голосов
/ 29 апреля 2018

Вам нужно использовать указатель вместо передачи копии. (То есть вы должны редактировать оригинал.) Вы можете исправить так:

#include <stdio.h>
typedef struct 
{
    int hp;
} Player;

void lessHp(Player* a)
{
    printf("a.hp = %d\n", a->hp);
    a->hp -= 1;
    printf("a.hp now = %d\n", a->hp);
}

int main()
{
    Player a;
    a.hp = 1;
    lessHp(&a);
    printf("a.hp = %d\n", a.hp);
    return 0;
}

с выходом:

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