什麼是初始化(在本地函數)嵌套結構的長鏈當每個結構只包含指向其它結構,像這樣的最佳/乾淨的方式:初始化在C長嵌套結構
typedef struct A{
struct B{
struct C *c /* OPTIONAL */;
struct D *d /* OPTIONAL */;
struct E *e /* OPTIONAL */;
struct F *f /* OPTIONAL */;
} *b;
struct G{
struct F *f /* OPTIONAL */;
struct D *d /* OPTIONAL */;
struct H *h /* OPTIONAL */;
struct F *f /* OPTIONAL */;
} *g;
} a;
每個指向嵌套結構的指針都指向包含指向其他嵌套結構的指針的結構(我知道,它的瘋狂!)
我想我需要爲每個結構成員定義一個tmp指針併爲它分配內存,也是一個tmp結構變量,並將前者指向後者:
B *b_ptr = CALLOC(1,sizeof(b_ptr));
B b_tmp;
b_ptr = &b_tmp;
b_tmp.itsMember1 = CALLOC(1,sizeof(itsMember1));
TypeOfItsMember1 itsMember1_tmp;
..
..
這將需要幾十個局部變量和痛苦的重複編碼。有沒有更好的方法來完全初始化父結構?
房子裏的任何專家都在照顧他們的2美分嗎?
感謝您的回覆。我意識到我可以用所有嵌套結構的組合參數創建一個新的扁平結構,並將其引用傳遞給init函數。然後,爲每個嵌套結構分配內存,並將指針分配給創建的結構中的各個參數。 定義init函數的問題在於,有些情況下嵌套結構僅包含指向另一個結構的指針,而沒有其他內容。因此,爲此定義一個init函數沒有任何意義。無論如何,謝謝你的建議;它絕對讓我思考.. – 2012-03-28 16:04:35