【問題描述】 單鏈表結構中有乙個指向該結構的next節點指標,為什麼要有這個節點指標呢?
【分析】
兩種情況:
(1) 呼叫1次malloc,要求儲存300個相同的結構;
(2) 呼叫300次malloc,要求儲存1個相同的結構;
這兩種情況有什麼區別呢?
第一種情況將分配乙個連續的記憶體塊,通過陣列符號(記錄了首位址),就可以訪問每個結構。而第二種情況,分配的記憶體不是連續的,這意味著這些結構不一定會被連續儲存,因此,不能通過陣列符號實現對每個結構的訪問。
包括單鏈表的鍊錶結構就屬於第二種情況,為了實現對整個結構的訪問,單鏈表有個聰明的辦法,那就是在每個結構中,利用乙個名為next的指標,記錄下乙個結構的首位址。這樣,只要知道了乙個結構的首位址和結構的大小,就可以實現對全部結構的訪問。
【使用場合】
單鏈表等鍊錶結構,都需要建立類似的指標,記錄鏈結結構的位址。因此每個結構會占用4位元組的指標空間。當資料量比較小時,採用第一種情況的方法,由於不需要額外的指標記錄結構的位址,更節省記憶體空間。當資料量比較大時,第一種情況,由於只malloc一次,在malloc時,必須分配足夠的空間供資料域使用,而結構的資料域大小本身是未知的,有大有小,勢必造成記憶體的浪費,第二種情況不存在該缺陷,資料量越大,優勢越明顯。
1 為什麼要有指標?
0 史前 早期的cpu 也許並沒有真正的實現 並不如今天的強大,記憶體讀寫的指令可能只有 從 常數 0x1234位址處讀入1位元組到暫存器a 或者 把暫存器b的值寫入 常數 位址0x5678這個地方 那個時候沒有變數這一說,所有的記憶體讀寫都得指定好常數,也就是得把具體的數字 也稱為字面量,lite...
單鏈表為什麼用指向指標的指標
int a 1,b 2 void change int x void change int x void main 上面的例子很好的說明了傳遞指標與傳遞指標的指標的不同 所以在建立單鏈表時,由於需要修改傳遞給呼叫函式的頭指標的值,所以需要傳遞指向頭指標的指標 include include incl...
TCP協議中的埠指什麼,為什麼要有埠
ip能鎖定一台物理機器,對應著一張網絡卡,外界發來的資料報網絡卡都會接收。但是問題來了,網絡卡給程式提供了介面,你監聽一下我,要是有訊息來了,我就 給你。這樣應用程式就能收到資料了。但是問題來了,程式a和程式b都需要監聽網絡卡接髮資料,網絡卡說那我把接到的資料都發給你兩,你們自己看著辦吧。好,小a小...