作者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/cn.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