c - 如何访问指向结构的指针的成员?
问题描述
我试图让指针和 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 错误,这让我认为我没有正确分配内存。我改变了不同的东西,但无论如何我都无法让它工作。deck
完成工作后如何访问成员createDeck
?
解决方案
让我分解你的问题。
在main()
,Card *deck = NULL;
将分配一个指针,Card
并且该指针指向 NULL。
然后你调用createDeck(&deck);
Here 你将指针的地址传递给类型 Card。因此,此地址不是 NULL,因为它指向分配在 Card* 类型堆栈上的指针变量。
这意味着在 中createDeck()
,变量deck
不会为 NULL,并且将具有有效地址。但是*deck
指向指针类型的指针Card*
将是NULL。您应该只为*deck
.
void createDeck(Card ** deck)
{
//deck = malloc(52 * sizeof(Card *)); //deck is a double pointer pointing to memory of type Card* allocated on stack in calling function main().
if (deck == NULL)
{
fprintf(stderr, "Null pointer error\n"); //If calling function passes NULL, it means there is some issue.
return;
}
*deck = NULL; //In more complex functions, if there are other logic before doing malloc(), it it better to reset the variables with default values.
//allocate memory for each card in deck
//for (size_t i = 0; i < 52; i++)
//{
// *(deck + i) = malloc(sizeof(Card));
//}
*deck = malloc(sizeof(Card)*52); //Allocate for all 52 Cards together
if(NULL == *deck)
{
fprintf(stderr, "malloc failed\n");
return;
}
//In case you want to access a card using deck variable.
(*deck)[2].suit = hearts;
}
推荐阅读
- mqtt - 如何在 MQTT 中启动 Eclipse-Hono 客户端?
- java - 如何在 mac 上找到 derbyclient.jar?
- marklogic - 找不到 xdmp:plan 结果文档
- ruby-on-rails - Rails 5:显示连接表中的表单
- android - 两个应用程序之间的通信问题:queryIntentActivities 返回空列表
- reactjs - 415 不支持媒体,正在调用 post REST 端点
- java - 如何在 Akka Java 中使用 Patterns.askWithReplyTo
- spring - 如何解决spring boot启动问题?
- wordpress - 在自定义帖子类型的所有单页中显示联系表 (CF7)
- python - 如何在一行上从一列读取到另一列?