2011-11-01 77 views
0

如果我將如下代碼以下一些事情:定義間引用的結構用C

typedef struct { 
    int a; 
    PTR1 bpointer; 
} *PTR2; 

typedef struct { 
    int b; 
    PTR2 cpointer; 
} *PTR1; 

我PTR2後確定PTR1,但使用如果使用它第一次那麼這將是可能是編譯時或運行時錯誤。那麼我怎樣才能避免這樣的錯誤並使用兩個參照結構?我認爲我們在兩個相互依賴的課堂上所做的一樣。那麼它有可能不會顯示任何錯誤,因爲我們現在只是定義它們,並且在調用這兩個函數時都已經定義了?混淆一點。

我真的很感激你的時間看到我的問題和你的努力。

謝謝

+1

我不是指針typedefs的忠實粉絲。我更喜歡只鍵入結構並在之後使用MyStruct * – hugomg

回答

3

第一步是擺脫typedefs和使用結構標籤。然後你可以轉發 - 聲明struct標籤,並且如果你仍然想使用它們,可以分別製作typedefs。請注意,使用typedef定義指向結構類型的指針被認爲是非常糟糕的風格,特別是當您完成時無法引用指向類型的指針。

struct struct1; 
struct struct2; 

struct struct2 { 
    int a; 
    struct struct1 *bpointer; 
}; 

struct struct1 { 
    int b; 
    struct struct2 *cpointer; 
}; 
+0

因此,當代碼將執行並行:struct1 * bpointer,它將指向哪個struct1?因爲結構1將在這行後定義? – Hafiz

+1

它已在第一行中被聲明*;它沒有定義,沒關係。 –

+0

@R謝謝你清除這個概念 – Hafiz