如何在函数内修改结构的值? [C]

时间:2018-04-29 03:11:46

标签: c pointers struct

我们将此代码视为示例

#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?当试图通过引用来做它时它告诉我使用(“ - &gt;”),但我真的,真的不知道那是什么(我只使用简单的指针,我唯一处理过的事情指针是动态内存分配)。

1 个答案:

答案 0 :(得分:2)

您需要使用指针而不是传递副本。 (那就是你应该编辑原作。)你可以像这样修复:

#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