對Delete指標 和 鍊錶中刪除操作的一些理解

2021-10-24 09:39:23 字數 1479 閱讀 5877

#include

using

namespace std;

typedef

struct nodenode,

*linklist;

//鍊錶結構單元的宣告

void

initlist

(linklist* l)

//引數是鍊錶結構單元的二級指標 初始化函式沒有返回值

void

create_from_head

(linklist l)

//頭插法建立鍊錶

else flag =0;

}}void

print

(linklist l)

cout <<

"end of the total run"

<< endl;

}void

delist

(linklist *l)

*l =

null

;//頭結點指向的記憶體已經都給揚了 可以delete頭指標

//在函式中修改乙個指標的值 要使用二級指標

//所有的結點都被delete了一次 所有的指標指向的記憶體都被釋放了一次 這一系列的指標都成為了野指標

}int

main

(void){

linklist list,

* l =

&list;

initlist

(l);

//初始化指標是修改指標的值 必須使用雙指標否則 就會在初始化函式裡面被建立乙個副本 無法將修改真正實現

list-

>data =

'h';

create_from_head

(list)

;print

(list)

;printf

("%p %c\n"

,list,list-

>data)

;delist

(&list)

;//delete後指標的值不會發生改變

//單獨的delete函式是對一級指標的操作

initlist

(l);

create_from_head

(list)

;print

(list)

;return

0;

在初始化的操作中,是給頭指標(空的,裡面沒有資料,只有乙個指標有值),賦乙個位址,是修改指標的值,必須採用二級指標的傳參方式,否則在函式中就是使用的乙個副本進行值得傳遞。

同樣的在刪除操作中,delete函式是將乙個指標所指向的記憶體所釋放,並不會修改指標的值,所以刪除函式中的delete操作可以使用一級指標,但是在釋放頭結點的時候,為了避免利用頭指標訪問乙個被釋放了的不可訪問的記憶體,必須將頭指標的值修改為null,也就是修改了指標的值,必須使用二級指標的傳參方式。(否則,就會導致頭指標指向的記憶體被釋放了,但是位址卻沒有發生改變,還是指向原來的那塊記憶體)

刪除鍊錶的節點,關於delete和free

最近溫習鍊錶的知識,看到 c 入門經典 第九版,p528。這裡面講解了鍊錶的刪除節點。delete nodetodelete 用這樣一句話就刪除節點了,十分方便。不過,我還是有些疑問,這是不是太簡單了。然後就查詢了一下,果然有學習到了乙個知識點,我已經會的,忘記了,這次又學一遍,應該不會忘記了。關於...

刪除表資料delete和truncate

truncate 命令用法 語法truncate table name 引數name 是要截斷的表的名稱或要刪除其全部行的表的名稱。注釋truncate table 在功能上與不帶 where 子句的 delete 語句相同 二者均刪除表中的全部行。但 truncate table 比 delete...

delete與truncate刪除表中資料的區別

1.delete與truncate都可以用來刪除表中資料 2.delete刪除你表中資料之後,再次插入資料索引會接著之前的,而truncate刪除表中後重新插入資料索引會從初始大小開始。3.delete在刪除資料後會將刪除操作作為事務儲存在日誌中,這樣就可以進行事務回滾。而 truncate則不可以...