我写了一个结构
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中执行此操作?
答案 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 }