[問題] 這題是否有問題

作者: siaco (@@)   2014-04-23 12:27:25
新手想請教看到的一個問題:
鏈結陣列:
struct data {
int value;
datatype *pt;
};
void deletept(struct data *dataptr)
{
struct data *temp;
temp = dataptr->pt;
*dataptr = *(dataptr->pt);
free(temp);
}
我想問的是為什麼這邊*dataptr = *(dataptr->pt);
這樣不就只是很單純的把下一個值的value搬過來而已嗎?
我的理解裡*是指標,可以將記憶體中的值取出來
而link list 的delete,一般是delete 傳入node的next node,
應該是用*dataptr->pt=*dataptr->pt->pt才對,
而這題只是單純的把*dataptr(取出data物件)後又把*(dataptr->pt)assign給他,
然後再free dataptr->pt,這樣是變成砍node 本身?
請問我的理解有錯嗎?
作者: Feis (永遠睡不著 @@)   2014-04-23 14:00:00
看起來是這個 delete 是要做出砍 node 本身的效果, 不是嗎?
作者: AndyLeo (打敗超越一切的人)   2014-04-23 14:11:00
方式不同,把下一個node copy到自己,free下一個node結果是砍掉了node本身,你的理解沒錯
作者: siaco (@@)   2014-04-23 14:39:00
恩,打一打發現變討拍文(誤) 看到後很疑惑,怕自己又漏掉某種指標的用法,謝謝!

Links booklink

Contact Us: admin [ a t ] ucptt.com