如何理解链表结构中的指针'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.)
希望这有助于澄清。
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.)
希望这有助于澄清。