c 宣告 和malloc不要重複開闢空間

2021-10-25 06:07:36 字數 644 閱讀 8947

宣告:在記憶體裡開闢一塊連續空間,屬於棧。

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 ...