我知道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).
可以访问对象或引用的本地作用域实例的成员。