有关链表和结构语法的问题

时间:2020-03-17 10:55:09

标签: c++

我知道C ++中的语法,即ptr-> data等效于(* n).data。我们取消了指针的引用以添加指向变量数据的值ptr,因此使用此概念以便添加存储在ptr内的值(指向指针的地址),我们应该写(n).next而不对其进行解引用,但是由于某种原因,它在我的链表代码中不起作用。这是错误的语法还是我的代码有问题?

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

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

void insertbegin(Node *&list, int x) {
  Node *n = (Node *)malloc(sizeof(Node));
  (*n).data = x;
  (n).next = NULL;

  if (list == NULL)
    list = n;
  else {
    n->next = list;
    list = n;
  }
}

void display(Node *&list) {
  while (list != NULL) {
    printf(" %d", list->data);
    list = list->next;
  }
}

int main() {
  Node *list = NULL;

  insertbegin(list, 3);
  insertbegin(list, 7);

  display(list);
}

3 个答案:

答案 0 :(得分:0)

您不能使用n.next,因为n是对指针的引用:

void insertbegin(Node *&list, int x)
    (n).next = NULL;

您必须首先使用n或更常见的*解除对->的引用:

    n->next = NULL;    // note: use nullptr instead of NULL

答案 1 :(得分:0)

您在insertbegin中忘记了星星:

(*n).next = NULL;

您已将n声明为上一行的指针。指针基本上只是一个数字。 如果要访问创建的Node结构,则需要使用星号或->运算符。

答案 2 :(得分:0)

使用n->(*n).甚至n[0].的目的在于如何访问n指向的对象的成员。无论成员变量的类型如何,在访问n的成员时始终使用这种形式。

您使用n.(n).访问对象或引用的本地范围实例的成员。

相关问题