[問題] linked list的指標問題

看板C_and_CPP作者 (風)時間14年前 (2011/03/20 09:02), 編輯推噓7(7036)
留言43則, 11人參與, 最新討論串1/1
這是螞蟻書第12章的linked list的部分程式碼 http://gyazo.com/82205d0d046b3841d4dcfcdc8e528473.png
在90行的時候 currentPtr = *sPtr; 這行我百思不得其解 為什麼兩個指標可以這樣做? 因為我自己在測試的時候 int i = 0,j = 1; int *a = &i,*b = &j; a = *b; 這也是兩個指標 為什麼就會出現int不能轉換成*int的錯誤 那上面的為什麼可以? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.46.6

03/20 09:11, , 1F
你搞錯了吧, sPtr 是 ListNodePtr *, currentPtr 則是
03/20 09:11, 1F

03/20 09:12, , 2F
ListNodePtr, 所以跟 *sPtr 同 type 沒錯
03/20 09:12, 2F

03/20 09:12, , 3F
注意看 一個型態是ListNodePtr 另一個是ListNodePtr*
03/20 09:12, 3F
這是最原本的code http://codepad.org/Z5E8TnjU 請問126行的 ListNodePtr currentPtr; 為何可以這樣設 13行的 typedef ListNode *ListNodePtr; 又為何這樣設 他一直自訂形態搞得我頭都昏了... ※ 編輯: wind75609592 來自: 112.104.46.6 (03/20 09:26)

03/20 09:27, , 4F
真得很希望看懂Linked List.謝謝
03/20 09:27, 4F

03/20 09:38, , 5F
我覺得你把typedef想太難了 普通式子定義變數 他定義型態
03/20 09:38, 5F

03/20 09:39, , 6F
就這樣而已,所以ListNodePtr是一個型態,跟ListNode* 等
03/20 09:39, 6F

03/20 09:39, , 7F
價 這樣的話ListNodePtr currentPtr; 定義方式跟以前沒
03/20 09:39, 7F

03/20 09:39, , 8F
什麼不一樣阿 就一個型態+一個變數名稱 Why not
03/20 09:39, 8F

03/20 10:01, , 9F
那13行那個是一個指標的型態?
03/20 10:01, 9F

03/20 10:42, , 10F
請問為什麼用listNode*宣告會failed
03/20 10:42, 10F

03/20 10:44, , 11F
listNode 和 ListNode 不等價?
03/20 10:44, 11F

03/20 10:44, , 12F
老實說雖然沒被這個困擾過但是真的不太喜歡這樣 typedef
03/20 10:44, 12F

03/20 10:47, , 13F
13 行你可以這樣想 typedef ( ListNode*) ListNodePtr
03/20 10:47, 13F

03/20 11:13, , 14F
ListNode 是和 struct listNode 等價, 這是 C 語言XD
03/20 11:13, 14F

03/20 11:43, , 15F
你打的例子 a=*b 不能跑是因為 *b是個整數 不是位址
03/20 11:43, 15F

03/20 11:44, , 16F
這個Linked List可以不用"pointer to pointer"來做嗎?
03/20 11:44, 16F

03/20 12:14, , 17F
大D自砍吧
03/20 12:14, 17F

03/20 12:15, , 18F
推錯篇Orz...(Sorry)
03/20 12:15, 18F

03/20 13:04, , 19F
還是不建議把指標取型態別名就是...
03/20 13:04, 19F

03/20 13:06, , 20F
可是微軟超愛耶 XD
03/20 13:06, 20F

03/20 14:22, , 21F
微軟應該是因為常常要傳 **int 之類的東西才這樣做
03/20 14:22, 21F

03/20 14:22, , 22F
不過俺還是不愛就是 lol
03/20 14:22, 22F

03/20 14:27, , 23F
不愛+1
03/20 14:27, 23F

03/20 14:45, , 24F
可怕的是 open source 還會有 typedef t *t 之類的鬼東西..
03/20 14:45, 24F

03/20 14:46, , 25F
^ 某些
03/20 14:46, 25F

03/20 14:50, , 26F
typedef 不只方便, 也抽象化了原型態, 除非有啥操作值
03/20 14:50, 26F

03/20 14:51, , 27F
得去這樣做, 過頭有害無益
03/20 14:51, 27F

03/20 20:43, , 28F
我還是不懂13行幹嘛這樣設ㄟ.那後面到底是指標還是?
03/20 20:43, 28F

03/20 20:51, , 29F
typedef ListNode *ListNodePtr; 用 ListNodePtr 型態
03/20 20:51, 29F

03/20 20:52, , 30F
定義的變數都是指標, 簡單說這樣子寫只是為了省下每次
03/20 20:52, 30F

03/20 20:52, , 31F
定義變數時需打上*的動作
03/20 20:52, 31F

03/20 21:27, , 32F
請問102行while裡面的條件再幹嘛?
03/20 21:27, 32F

03/20 21:33, , 33F
把currentPtr移至適當的地方
03/20 21:33, 33F

03/20 21:33, , 34F
currentPtr != NULL /*非空或者還沒走到尾端*/
03/20 21:33, 34F

03/20 21:35, , 35F
另外一個條件比較看不懂
03/20 21:35, 35F

03/20 21:39, , 36F
假如串列裡存了1 3 5而value是4,currentPtr就會指到5
03/20 21:39, 36F

03/20 21:39, , 37F
接下來會把4插在3與5之間
03/20 21:39, 37F

03/20 21:41, , 38F
一開始currentPtr指向1,而在while迴圈裡移動
03/20 21:41, 38F

03/20 23:10, , 39F
那如果那條件一直不成立是不是就不能指了
03/20 23:10, 39F

03/20 23:16, , 40F
...有下中斷點跑跑看嗎?
03/20 23:16, 40F

03/21 10:54, , 41F
老實說我不太確定為了省下 * 多打上 Ptr 這個...
03/21 10:54, 41F

03/21 10:56, , 42F
某些語言就是喜歡文字大於符號呀~
03/21 10:56, 42F

03/21 10:59, , 43F
衝打字速度的話, 我是覺得Ptr比shift+8快很多 ~"~
03/21 10:59, 43F
文章代碼(AID): #1DXL8KL8 (C_and_CPP)