在从函数调用返回后,我无法获取嵌套的结构数组以保留其成员。
这是我在头文件中定义的(为了可读性而使用精简结构成员):
typedef struct {
char *name;
} weapon;
#define MAX_SHOP_ITEMS 10
struct shop {
weapon items[MAX_SHOP_ITEMS];
};
typedef struct {
char *name;
struct shop shop;
} location;
我使用这些函数将成员添加到shop.items []数组结构中。 beginnerWeapon []是类型武器,在另一个文件中声明了元素0和1:
void PopulateShop(location loc)
{
printf("DEBUG: character location pointer: %s\n\n\n", loc.name);
loc.shop.items[0] = beginnerWeapons[0];
loc.shop.items[1] = beginnerWeapons[1];
printf("DEBUG: loc.shop.items[0].name: %s\n\n\n", loc.shop.items[0].name);
}
void ShowItems(location loc)
{
printf("DEBUG: location pointer in ShowItems(): %s\n\n\n", loc.name);
printf("DEBUG: loc.shop.items[0].name: %s\n\n\n", loc.shop.items[0].name);
}
现在,当我通过此函数将位置从另一个文件传递给每个函数时:...
void ShopMenu(location loc)
{
PopulateShop(loc);
ShowItems(loc);
}
...调试在两个函数中正确显示位置名称,正确的武器名称显示在PopulateShop()中,但shop.items []数组更改在我调用ShowItems时不会粘贴( )。我不确定是否需要为.items []分配内存,或者将其外部化,或者改为通过指针(我不完全确定如何处理下标),或者我也不知道如何处理。 m定义商店错误。任何帮助表示赞赏!
答案 0 :(得分:0)
使用Kaylum建议的指针修复 -
void PopulateShop(location *locIn)
{
location loc = *locIn;
loc.shop.items[0] = beginnerWeapons[0];
loc.shop.items[1] = beginnerWeapons[1];
*locIn = loc;
}
我花了一分钟才意识到我需要将局部变量保存回指针。谢谢你的帮助!
编辑:
要小心 - 这只适用于结构,因为结构的复制构造函数需要成员副本... David C. Rankin
很高兴知道。
locIn->shop.items[0] = beginnerWeapons[0];
locIn->shop.items[1] = beginnerWeapons[1];
我也学到了相当于
(*locIn).shop.items[0] = myArr[i];
正如我在顶部提到的,我不确定如何使用struct subscripting指针。现在我的学习上限还有另外一根羽毛,感谢大家!