我只想知道这两种符号之间是否有区别:
第一个例子:
struct node{
int data;
node* next;
};
void insert(node* list){
node* n,* last;
last = list;
while(last)
last = last -> next;
n = new node;
last = n;
n -> next = NULL;
cin >> n -> data;
}
int main(){
node* list = new node;
list -> next = NULL;
insert(list);
return 0;
}
第二个例子:
struct node{
int data;
node* next;
};
void insert(node* list){
node* n,* last;
last = list -> next;
while(last)
last = last -> next;
n = new node;
last = n;
n -> next = NULL;
cin >> n -> data;
}
int main(){
node* list = new node;
list -> next = NULL;
insert(list);
return 0;
}
所以我想知道符号谎言之间是否有区别:在第一个例子中:
last = list;
并且在第二示例中
last = lista -> next;
node*list在void insert(node*list({}中代表什么这只是一个指向任何列表的指针,一个指向主列表的指针还是什么?
您的上述解释是正确的,但让我再补充一点,假设您的
list = NULL;
void insert(node* list){
node* n,* last;
last = list -> next;
while(last)
last = last -> next;
n = new node;
last = n;
n -> next = NULL;
cin >> n -> data;
}
然后在上面的情况下,您试图访问"NULL"的下一个list->next
,因此它会给您运行时错误,因为您无法访问下一个nullptr,因为它没有定义。
struct node{
int data;
node* next;
};
void insert(node* list){
node* n,* last;
last = list;
while(last -> next)
last = last -> next;
n = new node;
last = n;
n -> next = NULL;
cin >> n -> data;
}
int main(){
node* list = new node;
list -> next = NULL;
insert(list);
return 0;
}
很明显,没有人愿意给我答案,所以我自己找到了。这就是编码的样子。原因:
last = list -> next;
以下内容将不起作用:列表->next被声明为NULL,因为一开始它不指向任何元素,所以显而易见的答案是:
last = list;
因为列表包含指向下一个元素的头的地址