C 指针和结构

C 指针和结构,c,pointers,C,Pointers,dictionary.c:89:16:错误:来自不兼容指针类型[-Werror]的赋值 dictionary.c:90:31:错误:来自不兼容指针类型[-Werror]的赋值 如何在这两个位置保存指针值?我是新手,所以请记住这一点。:) 在您的结构中,尚未定义类型节点。将其更改为使用结构标记: n.next = hashtable[hash_value]; hashtable[hash_value] = &n; 这: 是一个语法错误。节点*下一步发生在创建节点作为类型的

dictionary.c:89:16:错误:来自不兼容指针类型[-Werror]的赋值 dictionary.c:90:31:错误:来自不兼容指针类型[-Werror]的赋值
如何在这两个位置保存指针值?我是新手,所以请记住这一点。:)

在您的结构中,尚未定义类型节点。将其更改为使用结构标记:

    n.next = hashtable[hash_value];
    hashtable[hash_value] = &n;
这:

是一个语法错误。
节点*下一步
发生在创建
节点作为类型的typedef结尾之前。如果您的编译器出于某种原因接受了这一点,它可能认为现在有两种不同的类型称为“节点”,这就解释了其中一种类型与另一种类型不兼容的原因。您应该放弃typedef的愚蠢(结构通常不应该被typedef'ed),只使用

typedef struct
{
    char *word;
    node *next;
} node;

在定义结构之前定义结构的typedef名称。这允许相互引用结构而不考虑顺序,并且不需要不一致的定义,有时使用struct关键字,有时不使用struct关键字。注意,在C++中,可以完全去除TyPulf行:

struct node
{
    char *word;
    struct node *next;
};

您缺少了解发生了什么所需的一半代码。哈希表是如何定义的?好的,我添加了代码来回答这两条注释。或者,更好的做法是,在定义结构之前声明它:
typedef struct node;结构节点{char*word;节点*next;}断言不应该对结构进行类型化定义是没有依据的,而且有数百万行C代码使用类型化定义的结构。第五章是一个经过深思熟虑的论据。它基本上是说“不要使用typedef”,我根本不认为这是经过深思熟虑的
“vps_t a;在源代码中,它是什么意思?相反,如果它说struct virtual_container*a;你实际上可以分辨出“a”是什么。”
是对苹果和橙子的荒谬和不诚实的比较
struct vps a
vps\u t a
并不清楚
virtual_container*a
的清晰度不亚于
struct virtual_container*a
。有能力的专业人士不会容忍不诚实的论据。那么就用混乱的
节点
定义作为证据吧。如果有人不想在typedef上表现得太聪明,就不会发生这种情况。我见过许多其他类似的聪明断断续续的例子,动机是希望尽可能多地去掉
struct
关键字的实例,这对任何人来说都是不合理的困扰,但对初学者来说尤其不合理。我说让他们先学习在没有typedef的情况下结构是如何工作的。不太复杂,不是证据。有能力的专业程序员;在C++中,它们就是这样的。我说这个断言没有根据,也没有任何根据,不是莱纳斯,也不是你。。。这只是一种意识形态立场。我的最后一句话。
typedef struct
{
    char *word;
    node *next;
} node;
struct node
{
    char *word;
    struct node *next;
};
typedef struct node node;

struct node
{
    char* word;
    node* next;
};