我正在尝试在C中实现链接(哈希)。到目前为止,我已经编写了以下代码:
#include<stdio.h>
#include<stdlib.h>
#define size 10
typedef struct hashNode
{
int data;
struct hashNode *next;
} node;
int main()
{
node chain[size];
for(int i=0; i<=(size-1); i++)
chain[i] = NULL;
//insert(chain, 10);
return 0;
}
字符串
我得到以下错误:
In file included from /usr/include/stdlib.h:31,
from chaining.c:2:
chaining.c: In function ‘main’:
chaining.c:33:14: error: incompatible types when assigning to type ‘node’ {aka ‘struct hashNode’} from type ‘void *’
33 | chain[i] = NULL;
| ^~~~
型
3条答案
按热度按时间uoifb46i1#
看起来你试图让所有的
node
一开始都指向NULL
,但是node
不是指针。它们有一个名为next
的指针成员,所以你应该做的是:字符串
你也可以跳过循环,直接在定义数组时初始化它:
型
旁注:不要写
i<=(size-1)
。它有一个额外的认知负荷,在size
是unsigned
类型(这是常见的)的情况下是不安全的。写i < size
。i1icjdpr2#
NULL
通常用于指示指针没有指向任何有效的内存位置。Chain是一个节点对象的数组,而 * 不是 * 一个指向节点对象的 * 指针 * 的数组,因此你必须设置一个指针。字符串
我还看到你正在循环size - 1,这是多余的,会导致unsigned数据类型中的意外行为。你可以简单地使用
i < size
型
编辑:感谢@fe2o3指出使用循环将所有元素设置为
NULL
是老派的,我完全同意。还有其他方法可以使用,例如使用
memset
,calloc
或designated initialization
与较新的编译器。使用
memset
:型
使用
designated inits
:文档here型
最后,使用
calloc
:尽管如此,确保在完成后释放分配的MEMS。型
ojsjcaue3#
字符串
i<=(size-1)
=>i < size
chain[i]
是一个结构体,不是指针,你不能给它赋NULL。型
memset
型
型