C 正在将结构指针初始化为null
我正在尝试使用以下节点和表构建哈希表:C 正在将结构指针初始化为null,c,pointers,struct,null,C,Pointers,Struct,Null,我正在尝试使用以下节点和表构建哈希表: typedef struct Node { int key; int value; int status; } Node; typedef struct Table { int size; Node* node; } Table; structTable中的node是一个node指针,所以我认为hasht(Table*)->node应该是一个node*。我尝试将表中的所有节点*初始化为NULL,如下所示: for
typedef struct Node {
int key;
int value;
int status;
} Node;
typedef struct Table {
int size;
Node* node;
} Table;
structTable
中的node
是一个node
指针,所以我认为hasht(Table*)->node
应该是一个node*
。我尝试将表中的所有节点*
初始化为NULL
,如下所示:
for(int i=0;i<hasht->size;i++)
{
hasht->node[i]=NULL;
}
for(int i=0;isize;i++)
{
hasht->node[i]=NULL;
}
但是,当我编译代码时,它会给我以下错误:
“从类型'void*'分配给类型'Node{aka struct Node}'时,类型不兼容”
hasht->node[i]=NULL
我不明白为什么hasht->node[I]
是节点
,而不是节点*
。
如何在
表*
变量中使用表*
获取节点*
成员?是节点*
,它可以是指向单个节点
的指针,也可以是指向节点
对象数组的指针hasht->node[i]
然后引用这样一个数组中的i
thnode
对象。请注意,根据定义,对于指针p
,p[i]
相当于*(p+i)
如果希望表中有一个节点数组,可以按原样使用它,但是没有什么可以取消,因为表中有实际的Node
对象
另一方面,如果出于某种原因需要指向节点的指针数组,则需要将表成员更改为Node**Node
。然后,您可以让它指向指向节点
的一组指针,这些指针确实可以单独为空(因为hasht->Node[i]
将是一个节点*
)。但是,您将得到内存碎片,并且缓存不友好。确实要将结构指针初始化为NULL吗
我尝试将表中的所有节点*初始化为NULL,如下所示:
for(int i=0;i<hasht->size;i++)
{
hasht->node[i]=NULL;
}
只有一个指针,我想您需要为它分配一些内存:
hasht->node = calloc(hasht->size, sizeof(Node));
你的索引放错地方了。你需要
hasht[i]->node=NULL代码>(而不是hasht->node[i]=NULL;
)