2011-01-13 108 views
12

我寫一個struct如何初始化C中一個結構中的const變量?

struct Tree{ 
    struct Node *root; 
    struct Node NIL_t; 
    struct Node * const NIL; //sentinel 
} 

我想

struct Node * const NIL = &NIL_t; 

我不能初始化它的結構裏面。 我正在使用msvs。

我使用C,而不是C++。 我知道我可以在C++中使用初始化列表。

如何在C中這樣做?

+2

出於好奇,爲什麼你需要一個NIL_t的值和一個指向NIL的指針?這似乎有點多餘。獨立地,這是一個有趣的問題! – templatetypedef 2011-01-13 01:53:21

+0

正確。你沒有使用C++,這就是爲什麼你不能這樣做。 – 2011-01-13 02:00:30

回答

21

如果使用的是C99,你可以將舊指定的初始化程序來做到這一點:

struct Tree t = { .root = NULL, .NIL = &t.NIL_t }; 

在C99這隻作品,雖然。我已經在gcc上測試過了,它似乎工作得很好。

1

結構定義了數據模板,但本身沒有數據。由於它沒有數據,因此無法對其進行初始化。

另一方面,如果你想聲明一個實例,你可以初始化它。

struct Tree t = { NULL, NULL, NULL }; 
+1

`NIL_t`是一個`struct Node`,而不是`struct Node *`,所以它可能不會被初始化爲NULL。如果你願意的話,或者一個宏,我還會推薦製作一個`struct Tree * init(...)`函數(或者一個`void init(struct Tree * t,...)`函數)來做這種類型的爲你工作。 – 2011-01-13 02:07:29

0

也許這樣的事情就足夠了?

struct { 
    struct Node * const NIL; 
    struct Node *root; 
    struct Node NIL_t; 
} Tree = {&Tree.NIL_t};