[問題] 鏈結串列 哪邊錯了@@?

看板C_and_CPP作者 (\冏/)時間14年前 (2010/07/28 18:18), 編輯推噓1(1015)
留言16則, 3人參與, 最新討論串1/2 (看更多)
struct Nodes { int data; Nodes *next; }; Node* ins(Nodes *ptr, int num) { Nodes *tmp_ptr = ptr; Nodes *ptrNewNode = new Nodes; ptrNewNode->data = num; ptrNewNode->next = NULL; if (ptr == NULL) { return ptrNewNode; } while (tmp_ptr->next != NULL) { tmp_ptr = tmp_ptr->next; } tmp_ptr->next= ptrNewNode; } int main() { Nodes *hdr = NULL; hdr = ins(hdr, 10); ins(hdr, 20); ins(hdr, 30); return 0; } 想要達成的效果是: hdr -> 10 -> 20 -> NULL 不過 trace 了程式後發現, hdr 的值永遠都是 null 參悟不透啊 T_T -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 67.220.217.190

07/28 18:23, , 1F
參數原本指向null 後來改指向一塊新的空間 可是hdr還是
07/28 18:23, 1F

07/28 18:23, , 2F
指向原來的null阿 所以當然沒變
07/28 18:23, 2F

07/28 18:26, , 3F
可是我把 hdr 傳到 ins() 內了,並指定 ptr=ptrNewNode
07/28 18:26, 3F

07/28 18:27, , 4F
這樣不就會改寫 ptr 的值了嗎 @@
07/28 18:27, 4F

07/28 18:27, , 5F
hdr和ptr原本指到的是一樣的null 後來ptr自己去改指新的
07/28 18:27, 5F

07/28 18:28, , 6F
空間 但是hdr不會因此改變阿 他還是指向原來的null
07/28 18:28, 6F

07/28 18:33, , 7F
但是我不是傳了一個指標進去嗎 @@ hdr 這個指標
07/28 18:33, 7F

07/28 18:33, , 8F
你拿兩個箭頭指向同個東西 現在把其中一個箭頭移走 另一
07/28 18:33, 8F

07/28 18:34, , 9F
個不會隨之更動阿 你傳了指標的值進去 並不是指標本身
07/28 18:34, 9F
※ 編輯: homal 來自: 67.220.217.190 (07/28 18:39)

07/28 18:40, , 10F
您好,我改 code 了,現在是編譯不過
07/28 18:40, 10F

07/28 18:41, , 11F
expected constructor or type conversion before '*' token
07/28 18:41, 11F

07/28 18:42, , 12F
Node* ins(Nodes *ptr, int num) ,編譯器不讓我回傳 Node*
07/28 18:42, 12F

07/28 19:08, , 13F
因為根本沒有Node 這個型別啊 = ˇ =
07/28 19:08, 13F

07/28 20:23, , 14F
如果照你這樣改,應該要回傳 struct Node* 而非 Node*
07/28 20:23, 14F

07/28 20:24, , 15F
而且你回傳的東西沒有人接 這個回傳沒有意義
07/28 20:24, 15F

07/28 20:25, , 16F
上一句當我沒說,看錯了,抱歉
07/28 20:25, 16F
文章代碼(AID): #1CK0FTTH (C_and_CPP)
文章代碼(AID): #1CK0FTTH (C_and_CPP)