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



我知道C++中的语法,ptr->data等价于(*n(.data。我们取消引用指针是为了将ptr指向的值添加到变量数据,所以有了这个概念,为了添加存储在ptr内的值,也就是它指向的地址,我们应该写(n(。接下来不取消引用,然而,由于某些原因,它在我的链表代码中不起作用。这是错误的语法还是我的代码有问题?

#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);
}

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

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

必须先用*或更常见的->:取消引用n

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

您在insertbegin中忘记了一颗星:

(*n).next = NULL;

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

n->(*n).甚至n[0].的使用是关于如何访问n所指向对象的成员。无论成员变量的类型如何,在访问n的成员时都会使用此形式。

使用n.(n).可以访问对象或引用的本地作用域实例的成员。

最新更新