如何在C中初始化结构内的const变量?

时间:2011-01-13 01:51:01

标签: c struct initialization const

我写了一个结构

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

我想要

struct Node * const NIL = &NIL_t;

我无法在struct中初始化它。 我正在使用msvs。

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

如何在C中执行此操作?

4 个答案:

答案 0 :(得分:22)

如果您使用的是C99,则可以使用指定的初始化程序来执行此操作:

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

但这仅适用于C99。我已经在gcc上测试了它,它似乎工作正常。

答案 1 :(得分:1)

结构定义数据模板但本身没有数据。由于它没有数据,因此无法对其进行初始化。

另一方面,如果要声明实例,可以初始化它。

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

答案 2 :(得分:0)

也许这样的事情就足够了?

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

答案 3 :(得分:0)

对于那些寻求简单示例的人来说,它就是这样:

#include <stdio.h>

typedef struct {
    const int a;
    const int b;
} my_t;

int main() {
   my_t s = { .a = 10, .b = 20 };
   printf("{ a: %d, b: %d }", s.a, s.b);
}

产生以下输出:

{ a: 10, b: 20 }