首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将结构指针初始化为空

将结构指针初始化为空
EN

Stack Overflow用户
提问于 2018-05-26 09:43:19
回答 3查看 559关注 0票数 2

我试图使用以下节点和表构建哈希表:

代码语言:javascript
运行
复制
typedef struct Node {
   int key;
   int value;
   int status;     
} Node;

typedef struct Table {
   int size;
   Node* node;
} Table;

node in struct Table是一个Node指针,所以我认为hasht(Table*)->node应该是Node*。我尝试将表中的所有node*初始化为NULL,如下所示:

代码语言:javascript
运行
复制
for(int i=0;i<hasht->size;i++)
{
   hasht->node[i]=NULL;
}

但是,当我编译代码时,它会给出以下错误:

“当从类型‘void*’hasht->nodei=NULL分配给‘Node {aka struct Node}’类型时,不兼容类型;”

我不明白为什么hasht->node[i]Node而不是Node*。如何使用Node*Table变量中获得Table*成员

EN

回答 3

Stack Overflow用户

发布于 2018-05-26 09:48:31

hasht->node是一个Node *,它可以是指向单个Node的指针,也可以是指向Node对象数组的指针。然后,hasht->node[i]引用这样一个数组中的ith Node对象。注意,根据定义,对于指针pp[i]等同于*(p + i)

如果您希望您的表有一个节点数组,您可以按原样使用它,但是没有什么可以空出,因为表中有实际的Node对象。

另一方面,如果出于某种原因需要指向节点的指针数组,则需要将表成员更改为Node **node。然后,您可以让它指向指向Node的一个指针数组,这些指针确实可以单独空出(因为那时hasht->node[i]将是一个Node * )。您将得到内存碎片,并成为缓存-不友好,尽管。

票数 1
EN

Stack Overflow用户

发布于 2018-05-26 10:05:34

确定要将结构指针初始化为NULL吗?

我尝试将表中的所有节点*初始化为空,如下所示:

只有一个指针,我想您需要为它分配一些内存:

代码语言:javascript
运行
复制
hasht->node = calloc(hasht->size, sizeof(Node));
票数 0
EN

Stack Overflow用户

发布于 2018-05-26 17:46:13

你的索引放错地方了。你需要

hasht[i]->node=NULL; (而不是hasht->node[i]=NULL;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50541397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档