如何在C函数中更改结构变量?

时间:2017-08-30 09:04:51

标签: c parameter-passing function-call

基本上,我要做的是更改函数内的struct变量。这是代码:

int weapon_equip(struct player inventory, int in) {
    int x = in - 1, y;
    int previous_wep[4];

    //Stores the values of the previous equipped weapon.
    for(y = 0; y < 4; y++)
        previous_wep[y] = inventory.weapons[0][y];

    /* Since the equipped weapon has a first value of 0,
    I check if the player hasn't chosen a non-existant
    item, or that he tries to equip the weapon again.*/
    if(inventory.weapons[x][TYPE] != NULL && x > 0) {
        inventory.weapons[0][TYPE] = inventory.weapons[x][TYPE];
        inventory.weapons[0][MATERIAL] = inventory.weapons[x][MATERIAL];
        inventory.weapons[0][ITEM] = inventory.weapons[x][ITEM];
        inventory.weapons[0][VALUE] = inventory.weapons[x][VALUE];

        inventory.weapons[x][TYPE] = previous_wep[TYPE];
        inventory.weapons[x][MATERIAL] = previous_wep[MATERIAL];
        inventory.weapons[x][ITEM] = previous_wep[ITEM];
        inventory.weapons[x][VALUE] = previous_wep[VALUE];
    }
}

基本上,该功能的作用是,它将所选武器阵列的第一个值更改为0,使其适合玩家。它将配备武器的地方与所选武器进行交换。

但问题是 - 我必须在函数中更改很多变量,并且它们都属于结构体。我知道如何更改函数中的正常整数(使用指针),但我不知道如何使用结构变量。

2 个答案:

答案 0 :(得分:5)

将结构传递给函数时,会将其所有值复制(在堆栈上)作为函数的参数。对结构所做的更改仅在函数内可见。要在函数外部更改结构,请使用指针:

int weapon_equip(struct player *inventory, int in)

然后

inventory->weapons[0][TYPE] = inventory->weapons[x][TYPE];

这是

更漂亮的版本
(*inventory).weapons[0][TYPE] = (*inventory).weapons[x][TYPE];

答案 1 :(得分:1)

要使用指向该结构的指针访问结构的成员,必须使用→运算符,如下所示 -

structPointer->variable=5

实施例

struct name{
int a;
int b;
};


struct name *c; 
c->a=5;

(*c).a=5;