結構體可在多檔案中重複宣告多次(如"a.h"和"b.h"中都含有 struct st),所以可以有如下形式:
a.h:
struct st1;
struct st2;
b.h:
struct st1;
struct st2;
a.c:
#include "a.h"
struct st1
;
b.c:
#include "b.h"
struct st2
;
這樣寫的結果就是編譯時會報錯。
報錯的原因:系統在編譯過程(就是形成可執行檔案的過程)中,會判斷結構體的大小並賦予其空間,然而若寫成上述結構體巢狀的形式,系統會無法判斷結構體的具體大小,從而無法分配空間。
解決方法:既然報錯的原因是無法賦予具體大小的空間,那麼讓空間變得可以計算即可。
struct st1
;struct st2
;
採用具有確定空間大小的指標,便可以避免報錯。 結構體中巢狀結構體
結構體的巢狀問題 結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含指向其他結構體的指標。1.1不使用typedef時 錯誤的方式 struct tag 1 這種宣告是錯誤的,...
結構體的巢狀問題
結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含指向其他結構體的指標。1.1不使用typedef時 錯誤的方式 struct tag 1 這種宣告是錯誤的,因為這種宣告實際上...
結構體儲存檔案,從檔案中讀取結構體
include include include typedef enumtype typedef structcard int fd 0 initialize card void init card card open a file int file open void return 0 read ...