C 结构的嵌套数组有问题
从函数调用返回后,我很难让嵌套的结构数组保留其成员 以下是我在头文件中定义的内容(为了可读性,压缩结构成员): 我使用这些函数向shop.items[]结构数组添加成员。初学者武器[]是类型武器,在另一个文件中声明了元素0和1:C 结构的嵌套数组有问题,c,arrays,struct,C,Arrays,Struct,从函数调用返回后,我很难让嵌套的结构数组保留其成员 以下是我在头文件中定义的内容(为了可读性,压缩结构成员): 我使用这些函数向shop.items[]结构数组添加成员。初学者武器[]是类型武器,在另一个文件中声明了元素0和1: void PopulateShop(location loc) { printf("DEBUG: character location pointer: %s\n\n\n", loc.name); loc.shop.items[0] = beginne
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[]分配内存,或者将其外部化,或者传递指针(我不完全确定如何进行订阅),或者可能我对shop的定义不正确。感谢您的帮助 使用Kaylum建议的指针进行修复-- 我花了一分钟才意识到需要将局部变量保存回指针。谢谢你的帮助 编辑: 小心--这只适用于结构,因为结构的复制构造函数会复制成员。。。大卫·C·兰金 很高兴知道
locIn->shop.items[0] = beginnerWeapons[0];
locIn->shop.items[1] = beginnerWeapons[1];
我也学到了相当于
(*locIn).shop.items[0] = myArr[i];
正如我在顶部提到的,我不确定如何使用带有结构订阅的指针。现在我的学习帽上又插了一根羽毛,谢谢大家 常见问题。C中的函数参数是按值传递的。函数内部对函数参数的更改对调用方的值没有影响。如果要更改原始结构,请传入指针。问题的可能重复之处还可能在于如何分配和复制
name
。请小心--这仅适用于结构,因为结构的复制构造函数会复制成员。如果loc
是任何其他本地声明的复合类型,例如数组,您可以将本地值的地址分配给PopulateShop
到*locIn
,当函数堆栈内存释放以供重用时,该地址将在函数返回时被销毁。或者只需删除loc
并使用locIn->
,而不是loc.
。
locIn->shop.items[0] = beginnerWeapons[0];
locIn->shop.items[1] = beginnerWeapons[1];
(*locIn).shop.items[0] = myArr[i];