一、自引用結構
1、 什麼事自引用結構?
自引用結構(self-referential structure)是一種特殊的結構。主要特徵:乙個或多個自身的變數是指向自身的指標。
2. 判斷幾個自引用結構是否合法?
這個結構是非法的,為什麼呢?結構裡面有包含b,b裡面有包含自己的成員b,這樣就會無休止的迴圈下去。
編譯器在結構的長度確定之前,就已經知道指標的長度,所以這樣自引用是合法的。
二、malloc和free函式
自引用結構的記憶體分配和使用主要是通過動態儲存管理程式(malloc和free)來顯式的分配和釋放記憶體。
1. malloc函式原型
該函式分配了numbytes個位元組,並返回了指向這塊記憶體的指標。如果分配失敗,則返回乙個空指標(null)。
2. free函式原型
該函式是將之前用malloc分配的空間還給程式或者是作業系統,也就是釋放了這塊記憶體,讓它重新得到自由。
3.函式的用法
4. 注意點
申請了記憶體空間後,必須檢查是否分配成功。
當不需要再使用申請的記憶體時,記得釋放。
雖然malloc()函式的型別是(void *),任何型別的指標都可以轉換成(void *),但是最好還是在前面進行強制型別轉換,因為這樣可以躲過一
些編譯器的檢查。
5.深入發掘
malloc()到底從**得到了記憶體空間?
從堆裡面獲得空間。也就是說函式返回的指標是指向堆裡面的一塊記憶體。作業系統中有乙個記錄空閒記憶體位址的鍊錶。當作業系統收到程式的申請 時,就會遍歷該鍊錶,然後就尋找第乙個空間大於所申請空間的堆結點,然後就將該結點從空閒結點鍊錶中刪除,並將該結點的空間分配給程式
free()到底釋放了什麼?
free()釋放的是指標指向的記憶體!注意!釋放的是記憶體,不是指標!
參考文獻:
1/ 網路文章:
2/ fundamentals of data structures in c
3/ poninter on c
C語言中結構體 自引用 和 相互引用
technorati 標籤 c語言,結構體,自引用,相互引用,self reference,mutual reference 結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含...
C語言中結構體 自引用 和 相互引用
結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含指向其他結構體的指標。1.1 不使用typedef時 錯誤的方式 1 struct tag 1 這種宣告是錯誤的,因為這種宣告...
C語言中結構體 自引用 和 相互引用
結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含指向其他結構體的指標。1.1 不使用typedef時 錯誤的方式 1 struct tag 1 這種宣告是錯誤的,因為這種宣告...