小能豆

链表指针的区别

c

有什么区别

1struct LinkedList *current = malloc(sizeof(struct LinkedList));

2struct LinkedList *current;

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

当我创建 LinkedList 时,我无法使用第二个提到的代码实现大部分预期结果。


阅读 212

收藏
2024-02-15

共1个答案

小能豆

这两段代码有一些区别,让我们逐个解释:

  1. struct LinkedList *current = malloc(sizeof(struct LinkedList));

这段代码做了以下事情:

  • 声明了一个指向 struct LinkedList 类型的指针 current
  • 使用 malloc() 函数分配了足够的内存空间,以存储一个 struct LinkedList 类型的对象。
  • malloc() 函数返回一个指向分配的内存空间的指针,并将该指针赋值给 current 指针。

在这种情况下,您创建了一个动态分配的 struct LinkedList 对象,并且 current 指针指向了该对象的内存空间。这意味着您可以使用 current 指针来访问和操作该对象。

  1. struct LinkedList *current;

这段代码只是声明了一个指向 struct LinkedList 类型的指针 current,但没有分配内存来存储 struct LinkedList 类型的对象。在这种情况下,current 指针将会是一个未初始化的指针,它不会指向有效的内存空间。因此,您无法直接使用该指针来访问或操作 LinkedList 对象,因为对象本身并没有被创建。

要解决这个问题,您可以使用 malloc() 函数来为 current 指针分配内存,就像第一段代码中所做的那样,或者您可以使用静态分配来创建 LinkedList 对象,如下所示:

struct LinkedList current_node;
struct LinkedList *current = &current_node;

在这种情况下,current 指针指向了静态分配的 LinkedList 对象 current_node

2024-02-15