Ответ 1
Если вы используете C99, вы можете использовать назначенные инициализаторы для этого:
struct Tree t = { .root = NULL, .NIL = &t.NIL_t };
Это работает только на C99. Я тестировал это на gcc, и, похоже, он работает нормально.
Я пишу struct
struct Tree{
struct Node *root;
struct Node NIL_t;
struct Node * const NIL; //sentinel
}
Я хочу
struct Node * const NIL = &NIL_t;
Я не могу инициализировать его внутри структуры. Я использую msvs.
Я использую C, а не С++. Я знаю, что я могу использовать список инициализации в С++.
Как это сделать в C?
Если вы используете C99, вы можете использовать назначенные инициализаторы для этого:
struct Tree t = { .root = NULL, .NIL = &t.NIL_t };
Это работает только на C99. Я тестировал это на gcc, и, похоже, он работает нормально.
Структура определяет шаблон данных, но не имеет самих данных. Поскольку у него нет данных, нет возможности инициализировать его.
С другой стороны, если вы хотите объявить экземпляр, вы можете его инициализировать.
struct Tree t = { NULL, NULL, NULL };
Может быть, что-то вроде этого будет достаточно?
struct {
struct Node * const NIL;
struct Node *root;
struct Node NIL_t;
} Tree = {&Tree.NIL_t};
Для тех, кто ищет простой пример, вот оно:
#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 }