宣告:在記憶體裡開闢一塊連續空間,屬於棧。
malloc:在記憶體裡開闢一塊不連續空間,屬於堆。
檔案
typedef
struct linkedlist
lnode;
比如裡邊已經定義乙個鍊錶了
lnode linkedlist;
lnode* p =
&linkelist
這就已經建立了乙個鍊錶,且鍊錶位址就是head首位址, 不要再在create list的功能函式裡邊再次malloc head了。
void create_list ( lnode* p)
沒有定義的才需要malloc一下,比如寫stack
typedef
struct stack
stack;
這裡定義了stack s1之後還是要malloc,因為裡邊的base和top位址沒定,只是在棧裡開闢了指向這個stack名字的空間,大小為struct的大小,我這裡是8位元組。並不是後來malloc的幾百多位元組。
而鍊錶的名字位址就是head節點的位址,是同乙個,所以不用再次malloc。
解決C語言下enumerator重複宣告的問題
本人最近在buntu系統下用c編譯時,出現error redeclaration of enumerator 這個報錯,表示重複宣告了乙個列舉enum。如在led.h中宣告了乙個enum ifndef led h define led h typedef enum led color t endif...
c 宣告和定義
標頭檔案中的 全域性 變數只能放宣告,不能定義 標頭檔案中的變數只能宣告,不能定義,否則其他多個.c檔案包含該標頭檔案,出現重複定義,導致鏈結出錯。ifndef define endif防止的是 重複編譯 而不是 重複定義 重複編譯可能造成重複定義,但重複定義的 不只有重複編譯 從 變成可執行的程式...
C 宣告和定義
c 宣告和定義 宣告和定義最主要的區別是 宣告不申請記憶體空間而定義申請記憶體空間。定義申請記憶體空間這點需要.好像很多人這樣理解 我怎麼以為這有點問題 這裡有個簡單的錯誤,尤其是對我以c 的情景來理解c 標頭檔案中的 int a 全域性變數這樣寫 在c 中是定義。這裡有個情況是 如果 int a ...