这是我的两个结构:
typedef struct _card {
int suit;
int value;
} card;
typedef struct _deck {
int num_cards;
card *cards;
} deck;
这是我的制作卡片功能:
card *make_card(int suit, int value)
{
card *newCard = malloc(sizeof(card));
newCard->suit = suit;
newCard->value = value;
return newCard;
}
现在我有点卡住了。我必须制作一副纸牌。我知道如何将每个值分配给卡,但我对如何在内存中分配它感到困惑。我知道这与套牌结构中的一系列卡片有关,但我不知道如何做。
deck *make_standard_deck()
{
for (int i = 0; i <= 3; i++)
{
for (int j = 1; j <= 13; j++)
{
deck.cards[i] = make_card(int suit, int value);
}
}
}
您应该先分配整个卡片阵列,然后再分配单独的卡片。替代。您还可以使用 realloc 使数组变得越来越长,但这在这里似乎没有必要。
首先更改 make_card (也许可以重命名)
card *init_card(card* newCard, int suit, int value)
{
newCard->suit = suit;
newCard->value = value;
return newCard;
}
然后更改 make_standard_deck
deck *make_standard_deck()
{
const int numberOfValues = 13; // use constants when you can
const int numberOfSuits = 4;
deck* d = malloc(sizeof(deck)); // normally check return value
d->num_cards = numberOfValues*numberOfSuits;
d->cards = malloc(sizeof(card) * (d->num_cards));
for (int i = 0; i < numberOfSuits; i++)
{
for (int j = 0; j < numberOfValues; j++)
{
// pass the card to initialized to the function
// same as &(d->cards[i])
init_card(d->cards + i, i + 1, j + 1);
}
}
return d;
}
当你释放它时
void freeDeck( deck *d )
{
if ( d != NULL )
{
free( d->cards );
}
free( d );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)