#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則不可以...