如何索引结构中可变长度的指针?我的情况如下:
我正在制作卡片模拟游戏,我试图将扑克牌指向与牌组中特定牌相同的位置。但是,我收到错误,“错误:从类型'struct Card *'分配类型'卡'时不兼容的类型”。
据我所知,这是因为我在结构中访问卡的方式不正确。也就是说,我相信我正确地设置了Hand类型,但是我没有正确地将其中的卡片编入索引,以将指针分配到与卡片卡相同的位置。
我认为这个问题的独特之处在于我正在尝试将struct Hand中的每个指针分配给内存中的某个位置。当我尝试使用括号来索引playCards时,编译器取消引用playCards并访问底层的Card数据。我想要做的是循环手牌大小(5)并通过将玩家的牌指针指向我刚刚出局的牌来向每位玩家发牌。然后,我把卡放在甲板的后面。
我的数据抽象如下,我分配指针的代码如下:
typedef struct card_{
char* rank;
char* suit;
} Card;
typedef struct deck_{
Queue cardDeck;
}Deck;
typedef struct hand_{
Card *playingCards;
}Hand;
typedef struct player_{
Hand hand;
int bank_roll;
}Player;
typedef struct table_{
Player player[NUM_PLAYERS];
}Table;
指针分配:
cTable->player[playerIndex].hand.playingCards = cardRemoved;
但是,这只会将cardRemoved分配给第一个Card指针。我想做的是:
cTable->player[playerIndex].hand.playingCards[cardIndex] = cardRemoved;
但是当我这样做时,它会解除上面提到的playCards,并抛出错误error: incompatible types when assigning to type 'Card' from type 'struct Card *'
请告诉我这里我做错了什么。任何帮助将不胜感激!
答案 0 :(得分:1)
如果我理解正确,你想要的是playCards是一个指针数组。
如果您知道数组的大小,您可以像使用Table结构一样使它成为静态数组,如下所示:
typedef struct hand_{
Card *playingCards[NUM_CARDS_IN_HAND];
}Hand;
这使得playCards成为Card *的数组,以及上面提到的代码
cTable->player[playerIndex].hand.playingCards[cardIndex] = cardRemoved;
会起作用。
如果你对playCards的大小没有限制,你可以将playCards作为卡**,如下所示:
typedef struct hand_{
Card **playingCards;
}Hand;
然后在添加和删除卡片时动态分配空间。
在这种情况下,您知道手中的最大牌数为5,所以我认为第一个例子就足够了。