【发布时间】:2019-08-30 06:54:26
【问题描述】:
我正在努力让指针和 C 更自如,所以我一直在做练习题。我有一个结构:
typedef struct Card
{
enum { hearts, spades, clubs, diamonds } suit;
int value;
} Card;
还有一个用于为卡组分配内存的函数:
void createDeck(Card ** deck)
{
deck = malloc(52 * sizeof(Card *)); //allocate space for deck
if (deck == NULL)
{
fprintf(stderr, "malloc failed\n");
return;
}
//allocate memory for each card in deck
for (size_t i = 0; i < 52; i++)
{
*(deck + i) = malloc(sizeof(Card));
}
}
我正在尝试使用这样的代码:
int main()
{
Card *deck = NULL;
createDeck(&deck);
printf("%d", deck[0].suit)
}
这给出了一个 nullptr 错误,这让我认为我没有正确分配内存。我改变了不同的东西,但无论如何我都无法让它工作。使用createDeck 完成工作后,如何访问deck 的成员?
【问题讨论】:
-
C 中的所有内容都是按值传递的。当您调用
createDeck时会生成deck的副本,因此对deck所做的任何修改仅在该副本的函数内是持久的。为了在函数外部查看对deck的修改,您必须返回它或者(在本例中,因为您已经传递了一个指针),取消引用指针并修改它指向的对象(其范围超出函数)。
标签: c arrays memory-management struct