#include<iostream>
using namespace std;
class node{
public:
int data;
node* addr;.//it's address of the next node
node(int val){
data=val;
addr = NULL;
}
};
void addVal(node* &head, int val){
node *n=new node(val);
if (head==NULL){
head = n;
return;///<-WHY THIS?
}
node *p=head;
while(p->addr!=NULL){
p=p->addr;
}
p->addr=n;
return;
}
void display(node *head){
node *p=head;
while(p!=NULL){
cout<<p<<" "<<p->data<<" "<<p->addr<<endl;
p=p->addr;
}
}
int main(){
node *head=NULL;
addVal(head,1);
addVal(head,2);
addVal(head,3);
addVal(head,4);
addVal(head,5);
display(head);
return 0;
}
當我在沒有回傳的情況下運行它時,我得到了一個空白終端;在 if 陳述句里面。為什么這里需要 return ?(我通過參考傳遞了 head 的 val,所以如果我在函式內部更改它,實際值將像往常一樣受到影響。但不知何故它在沒有回傳的情況下卡住了)。
uj5u.com熱心網友回復:
如果你不return這樣做,就會發生這種情況:
node *p=head; // p equals head which equals n
while(p->addr!=NULL){ // p->addr is NULL, this loop stops immediately
p=p->addr;
}
p->addr=n; // this assignes n to p's next ptr
return;
對同一事物使用許多不同的名稱可能會有點混亂。您創建一個新節點,指向它的指標是n。這是新的head。p也指向這個新的head。
Nowaddr是 的下一個節點head。
如果在創建新head的并將指標分配給head函式后沒有回傳,將繼續將指向同一節點的指標分配給head->addr. 你會得到一個串列,其頭部將自己作為下一個節點。
您可以使用除錯器觀察到這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/537390.html
標籤:C 哎呀数据结构
上一篇:JSDoc沒有檢測JS中的類繼承
