如何理解链表结构中的指针'next'?

How to understand pointer 'next' in a linked list structure?

struct Node
{
   int a;
   struct Node *next;
};

next 将如何动态寻址?我读到 malloc returns 地址值——对吗? 请解释struct Node *next。这是在结构中声明指针的默认方式吗?

如果你有这份声明

struct Node
{
   int a;
   struct Node *next;
};

那么你可以这样定义它:

struct Node node = {1, 0};

struct Node *node = (Node*) malloc(sizeof(struct Node)); 

当您想将节点附加到 next 成员时,您可以这样操作,例如:

node.next = (Node*) malloc(sizeof(struct Node));

node->next = (Node*) malloc(sizeof(struct Node));

示例实验:

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

int main(int argc, char **argv) {
    struct Node
    {
       int a;
       struct Node *next;
    };

    struct Node node1;
    struct Node *node2 = (Node*) malloc(sizeof(struct Node)); 

    node1.a = 1;
    node2->a = 2;
    node1.next = node2;
    node2->next = (Node*) malloc(sizeof(struct Node));
    node2->next->a = 3;

    printf("node1.a = %d, node1->next->a node2->a = %d, node2->next->a = %d\n", node1.a, node2->a, node2->next->a);
}

是的,你的声明是正确的。要理解它,请这样看。当编译器想知道它应该编译 strcut 的下一个字段的指针类型时。使用您提供的声明类型。因为编译器在到达这一行之前已经解析了结构。它知道下一个指针类型也是相同的结构类型。我希望这有助于您的理解。

Start 指向列表的顶部并且对您的程序全局可用。而 next 只是跟踪下一个项目,并且在引用特定 'node' 时可用。看这张图或许能帮助你直观的理解!

link 在内部跟踪以下项目,它跟踪下一个组件的位置,因为它不一定像数组那样连续。

+------+     +------+     +------+
| data |     | data |     | data |
+------+     +------+     +------+
| next |---->| next |---->| next |----> NULL
+------+     +------+     +------+
   ^
   |
 START (Keep track of the whole list.)

希望这有助于澄清。