C - 主函数中的(节点)结构不工作(有意避免使用单链表实现)

C - Not working (node) structures in main function (intentionally avoiding use of singly linked list implementation)

我正在尝试创建一个 linked 列表而不执行。我这样做只是为了更深入地了解结构的工作原理。我只想在主函数中创建 2 个节点并 link 它们。我可以在结构声明中使用 typedef 并通过实现来做到这一点,但这不是我想要的(我可以成功做到)。

我写了一些代码,但是在第27行出现错误(同样的问题出现在第29、30和33行)。我知道这个问题的解释很简单,但我无法在脑海中或网络(或书籍)上找到它。对于这个问题的任何帮助,我将不胜感激。去年我一直在编程。

我想在 CodeReview 中寻求帮助,但相应地,根据他们的常见问题解答,这不是在此类问题上寻求帮助的地方。

错误是:

27:11: error: incompatible types when assigning to type 'struct NODO ' from type 'struct NODO'

E.sig = F;

其他线路也有同样的问题。所有内容都在同一个文件 (.c) 中。

完整代码如下:

#include <stdio.h>
#include <stdlib.h>

struct NODE {
    int data;
    struct NODE *next;
};

struct LIST {
    struct NODE *first;
    struct NODE *last;
    int size;
};


void main(){

    struct NODE E;
    struct NODE F;
    struct LIST L;

    E.data = 1;
    E.next = NULL;

    F.data = 2;
    F.next = NULL;
    E.next = F;          // line 27

    L.first = E;         // line 29
    L.last = F;          // line 30

    struct NODE *ptr;
    ptr = E;             // line 33

    while(ptr != NULL){
        printf("%i\n", ptr->data);
        ptr = ptr->next;
    }
}

问题是您正试图将一个对象分配给一个指针。您应该分配节点的地址并记下节点对象本身。

尝试E.next = &F;,其他的都一样。

一个指针是一个变量,它的值是另一个变量的地址,即内存位置的直接地址。所以你必须提供内存位置的地址。在 C 中,变量的地址是使用 & operator.

导出的

修改后的代码:-

#include <stdio.h>
#include <stdlib.h>

struct NODE {
    int data;
    struct NODE *next;
};

struct LIST {
    struct NODE *first;
    struct NODE *last;
    int size;
};


int main(){

    struct NODE E;
    struct NODE F;
    struct LIST L;

    E.data = 1;
    E.next = NULL;

    F.data = 2;
    F.next = NULL;
    E.next = &F;          // not  E.next = F; 

    L.first = &E;         // not  L.first = E;
    L.last = &F;          // not  L.last = F;

    struct NODE *ptr;
    ptr = &E;             // not ptr = E;   

    while(ptr != NULL){
        printf("%i\n", ptr->data);
        ptr = ptr->next;
    }

    return 0;
}

建议使用 int main() 而不是 void main()

输出:-

1
2

在将问题发送给 SO 几分钟后,我找到了解决方案或至少一些其他信息,使我找到了解决方案。

在维基百科 (https://en.wikipedia.org/wiki/Struct_(C_programming_language)#Pointers_to_struct) 中,我找到了下一段代码:

struct point {
   int x;
   int y;
};
struct point my_point = { 3, 7 };
struct point *p = &my_point;  /* To declare and define p as a pointer of type struct point,
                                 and initialize it with the address of my_point. */

我的错误是使用指针指向结构而不是结构的地址。指针只能指向地址(它们存储它的值),它们不能指向对象。