學習資料結構時對指標和鍊錶很迷糊,也就自己總結 一下,如果有錯誤或者理解上的錯誤歡迎指正,謝謝
指標
指標是什麼,指標就是指標型別,就和int 型別,float型別等一樣,而對於指標個人當時學習的時候總被*弄得迷糊,
*的作用:
1:型別說明符,int*p,定義p是乙個指向整型的指標變數,p就是這個位址,具體說明教科書有。所以有int *p;p=&a或者是int *p=&a;在這裡時強調一點int* p,可以寫成這種形式,是指p所指向的資料域是整型,
2:指標指向的值的運算
3:野指標
當定義乙個指標變數後,需要對其進行初始化,p=null,或者p=&a;如果不將其初始化,那麼p沒有一定的指向,這時會有一定的危險,同時在呼叫free後,此時需要將指標p=null,如若不然,則此時的p為野指標,所以要將其p=null
鍊錶linklist l和link *l的區別
1:l=(linklist *)malloc(sizeof(lnode))對嗎?
2:l=(linklist)malloc(sizeof(lnode))對嗎?
3:**l=(linklist)malloc(sizeof(lnode))對嗎?
首先看一下單鏈表的儲存結構(參考嚴蔚敏的教材)
typedef struct lnodelnode, *linklist
首先linklist 是什麼?
linklist是乙個指標變數,指向lnode的結構體的指標變數,
linklist l是什麼?怎麼去理解,我是這樣理解的,我們學過了整型變數的定義 int a;a 是乙個整型變數,同時我們可以理解linklist l,定義乙個變數l是linklist型,此時的l
也是乙個指標變數,指向結構體lnode,此時的l是個一級指標,同理linklist *l,把l換成q是沒有關係的,所以就變成了linklist *q,同理*p是個指標變數,指向lnode,此時我們又回到了指標符號*的作用上,是取值運算,取p所指向的是個指標,也就是說指標p指向指標,所以此時的指標p是個二級指標
malloc用法:
(l型別*)malloc(sizeof(lnode))是系統分配乙個大小為lnode的記憶體,並把這個記憶體的首位址轉換為什麼型別的指標,linklist本身是乙個指標,此時linklist *則是乙個二級指標
所以第乙個不對
注第二個中的l是linklist *l中的l
我們剛才說了此時的l是二級指標,所以也不正確
看第三個**l可以這樣理解*(*l),
即為取值,所以第三個也不成立
二級指標和一級指標
一級指標指向資料域,而二級指標指向指標域,具體見書本
實現鍊錶操作時關於指標的一些問題
typedef structlnode,linklist void create linklist l int headinsert linklist l return 0 我有疑問的地方已在 中表明。我捋了半天也沒捋清,我知道l是指向結構體的指標的指標 l才是實際指向結構體的指標。在我的creat...
關於鍊錶的一些問題的整理
鍊錶的類通常表示如下 public class listnode 一 建立鍊錶 根據給定的陣列使用尾插法和頭插法建立鍊錶 public static listnode createlistnode int array return node private static void addnode l...
關於指標定義的一些問題
關於const在定義常量方面的使用問題 在學習的c c 的過程中,會時常會碰到一些令人大費腦筋拐不過彎來的事情 比如這個const的使用。當我看到和int const a,const int a,const int const a const int a,int const a的 時候,頭都大了,一...