我知道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);
}
答案 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).
访问对象或引用的本地范围实例的成员。