如何更改 C 函数中的结构变量?
How do I change struct variables in a C function?
基本上,我要做的是更改函数内的结构变量。这是代码:
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,使其装备给玩家。它交换装备武器的位置,与选择的武器装备。
但问题是 - 我必须更改函数中的很多变量,并且它们都属于一个结构。我知道如何更改函数中的普通整数(使用指针),但我不知道如何使用结构变量。
要使用指向该结构的指针访问该结构的成员,您必须使用 → 运算符,如下所示 -
structPointer->variable=5
例子
struct name{
int a;
int b;
};
struct name *c;
c->a=5;
或与
(*c).a=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];
基本上,我要做的是更改函数内的结构变量。这是代码:
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,使其装备给玩家。它交换装备武器的位置,与选择的武器装备。
但问题是 - 我必须更改函数中的很多变量,并且它们都属于一个结构。我知道如何更改函数中的普通整数(使用指针),但我不知道如何使用结构变量。
要使用指向该结构的指针访问该结构的成员,您必须使用 → 运算符,如下所示 -
structPointer->variable=5
例子
struct name{
int a;
int b;
};
struct name *c;
c->a=5;
或与
(*c).a=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];