作者sbk8027 (小朱)
看板C_and_CPP
標題[問題] Linked list問題請教
時間Wed Apr 13 22:24:21 2016
各位前輩大家好 小弟這兩天在自學遇到一些問題麻煩想請教版上高手
小弟用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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1460557464.A.9DB.html
※ 編輯: sbk8027 (1.164.36.104), 04/13/2016 22:44:47
1F:推 kwpn: *sPtr不是字串也不是字元,你想看字元應該是data吧 04/13 23:32
2F:推 CaptainH: 沒有call by pointer這種東西 04/13 23:36
3F:推 ronin728: 36行那是newPtr本身的位置,37行那是newPtr所指向物件的 04/14 00:05
4F:→ ronin728: 位置。是說,才兩天直接上Linked list會不會太快? XD 04/14 00:06
5F:→ ronin728: 指向NULL代表這個節點後沒有串接節點 04/14 00:06
6F:→ ronin728: 設成別的Node的pointer才代表掛上去 04/14 00:07
7F:→ ronin728: 你會問這些問題代表你Pointer很不熟,建議往回看看 04/14 00:09
8F:推 ko27tye: 你的code我怎麼跑 輸出都只有? 04/14 00:24
9F:推 ko27tye: startptr一開始指向NULL 後來會經由insert函式指向struct 04/14 00:32
10F:推 ko27tye: 我大概知道你問題在哪了 typedef ListNode *ListNodePtr 04/14 00:59
11F:→ ko27tye: ListNodePtr已經是指標了 insert的參數列用 04/14 01:00
12F:→ ko27tye: ListNodePtr *sPtr 變成指向指標的指標 04/14 01:01
13F:推 ko27tye: 你很多地方都多加一顆* 然後printf的問題我不清楚, 04/14 01:05
14F:→ ko27tye: 但我改用cout可以正常輸出 04/14 01:05
15F:→ ronin728: 是說用上double pointer,其實個小花招 04/14 02:18
16F:推 longlongint: 想成填表格會不會比較簡單? 04/14 02:57
17F:推 Frozenmouse: 照你的insert函式設計邏輯來說,一開始16行指向NULL 04/14 04:28
18F:→ Frozenmouse: 表示該LinkedListPtr代表一空List 04/14 04:28
19F:推 Frozenmouse: 一開始看別人上課講義也有這樣設計,腦袋也轉不太過 04/14 04:32
20F:→ Frozenmouse: 來XD 我比較習慣不把NULL當List看待的設計 04/14 04:32
21F:→ Frozenmouse: 36,37行一個是newPtr的址,一個是newPtr的值,而指標 04/14 04:35
22F:→ Frozenmouse: 的值就是位址 04/14 04:35
23F:→ Frozenmouse: 這也是為何我們說沒有call-by-pointer這回事,全部都 04/14 04:36
24F:→ Frozenmouse: 是value 04/14 04:36
25F:推 Frozenmouse: 57,58行想把串列指標當字串或字元輸入是不是搞錯什麼 04/14 04:39
26F:→ Frozenmouse: *輸出 04/14 04:39