[問題] Linked list問題請教

看板C_and_CPP作者 (小朱)時間8年前 (2016/04/13 22:24), 8年前編輯推噓11(11015)
留言26則, 6人參與, 最新討論串1/1
各位前輩大家好 小弟這兩天在自學遇到一些問題麻煩想請教版上高手 小弟用Dev c++ 練習 程式碼如網址http://codepad.org/gJOLUkJB 我覺得我有點搞混call by value跟 call by pointer了 關於第16行的 ListNodePtr startPtr=NULL; 我想請問一下應該是指向NULL還是指向struct,感覺我有點搞混了 我一直覺得是指向NULL長這樣startPtr ---> NULL但書裡又說指向節點結構 在第36行及37行 printf("\n(1)newPtr= %x\n",&newPtr); printf("\n(2)newPtr= %x\n",newPtr); 36行是以16進位的方式printf這個newPtr的address在這裡得到22fd8 想請問37行printf出來的數值是547cb0 請問這是什麼東西呢? 小弟在想是因為這樣嗎? http://imgur.com/z71oEEY
(好像因為電腦不同記憶體位置不同) 然後想請問一下如果我畫的是對的,阿圖中上面的方塊是那個東西的實體阿.... 因為假設 char a=NULL; char *aPtr=&a; 所以會長 http://imgur.com/fNixO2n
假設我今天鍵入的是一個b 第57行跟第58行差異在一個是以字串的形式輸出,一個是以字元的形式 printf("\n(3)*sPtr= %s\n",*sPtr); printf("\n(4)*sPtr= %c\n",*sPtr); 但是為什麼以字串的形式可以得到我鍵入的b 但是字元的形式輸出卻會得到?或是奇怪的符號 麻煩各位前輩幫我解釋一下了 萬分感謝各位前輩!!謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.36.104 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1460557464.A.9DB.html ※ 編輯: sbk8027 (1.164.36.104), 04/13/2016 22:44:47

04/13 23:32, , 1F
*sPtr不是字串也不是字元,你想看字元應該是data吧
04/13 23:32, 1F

04/13 23:36, , 2F
沒有call by pointer這種東西
04/13 23:36, 2F

04/14 00:05, , 3F
36行那是newPtr本身的位置,37行那是newPtr所指向物件的
04/14 00:05, 3F

04/14 00:06, , 4F
位置。是說,才兩天直接上Linked list會不會太快? XD
04/14 00:06, 4F

04/14 00:06, , 5F
指向NULL代表這個節點後沒有串接節點
04/14 00:06, 5F

04/14 00:07, , 6F
設成別的Node的pointer才代表掛上去
04/14 00:07, 6F

04/14 00:09, , 7F
你會問這些問題代表你Pointer很不熟,建議往回看看
04/14 00:09, 7F

04/14 00:24, , 8F
你的code我怎麼跑 輸出都只有?
04/14 00:24, 8F

04/14 00:32, , 9F
startptr一開始指向NULL 後來會經由insert函式指向struct
04/14 00:32, 9F

04/14 00:59, , 10F
我大概知道你問題在哪了 typedef ListNode *ListNodePtr
04/14 00:59, 10F

04/14 01:00, , 11F
ListNodePtr已經是指標了 insert的參數列用
04/14 01:00, 11F

04/14 01:01, , 12F
ListNodePtr *sPtr 變成指向指標的指標
04/14 01:01, 12F

04/14 01:05, , 13F
你很多地方都多加一顆* 然後printf的問題我不清楚,
04/14 01:05, 13F

04/14 01:05, , 14F
但我改用cout可以正常輸出
04/14 01:05, 14F

04/14 02:18, , 15F
是說用上double pointer,其實個小花招
04/14 02:18, 15F

04/14 02:57, , 16F
想成填表格會不會比較簡單?
04/14 02:57, 16F

04/14 04:28, , 17F
照你的insert函式設計邏輯來說,一開始16行指向NULL
04/14 04:28, 17F

04/14 04:28, , 18F
表示該LinkedListPtr代表一空List
04/14 04:28, 18F

04/14 04:32, , 19F
一開始看別人上課講義也有這樣設計,腦袋也轉不太過
04/14 04:32, 19F

04/14 04:32, , 20F
來XD 我比較習慣不把NULL當List看待的設計
04/14 04:32, 20F

04/14 04:35, , 21F
36,37行一個是newPtr的址,一個是newPtr的值,而指標
04/14 04:35, 21F

04/14 04:35, , 22F
的值就是位址
04/14 04:35, 22F

04/14 04:36, , 23F
這也是為何我們說沒有call-by-pointer這回事,全部都
04/14 04:36, 23F

04/14 04:36, , 24F
是value
04/14 04:36, 24F

04/14 04:39, , 25F
57,58行想把串列指標當字串或字元輸入是不是搞錯什麼
04/14 04:39, 25F

04/14 04:39, , 26F
*輸出
04/14 04:39, 26F
文章代碼(AID): #1N3bQOdR (C_and_CPP)